[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: В консоли работает, а из скрипта нет, почему?
SergSerg
в консоли набираю:
cd output; rar a yarmarka .
работает как нужно,
но если запускаю php скрипт:
#!/usr/bin/php
<? $exec(`cd output; rar a yarmarka .`); ?>

то сработки не происходит
что я делаю не правильно?
Игорь_Vasinsky
может

 <?php   system('cd output; rar a yarmarka');   ?>


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
SergSerg
Цитата (Игорь_Vasinsky @ 9.01.2013 - 14:11)
может
 <?php   system('cd output; rar a yarmarka');   ?>

выдает:
Program aborted
Игорь_Vasinsky
Проверь синтаксис

Цитата
cd output; rar a yarmarka


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
SergSerg
синтаксис проверил:
копирую из своего файла код:
system('cd output; rar a yarmarka');				// не срабатывает

попробовал так:
system('rar a yarmarka output');

так же не срабатывает
такое ощущение что "в трех соснах заблудился"....
Oyeme
Вы используете "множественные команды."
Попробуйте http://www.php.net/manual/en/function.proc-open.php
SergSerg
Цитата (Oyeme @ 9.01.2013 - 14:44)
Вы используете "множественные команды."
Попробуйте http://www.php.net/manual/en/function.proc-open.php

с нее и начал, но данная функция для меня слишком сложная... даже код не понял как написать......
SergSerg
Цитата (Oyeme @ 9.01.2013 - 14:44)
Вы используете "множественные команды."
Попробуйте http://www.php.net/manual/en/function.proc-open.php

дак ведь это не множественная команда:
system('rar a yarmarka output');
она так же не работает........ или я не о том?.......
sergeiss
Цитата (SergSerg @ 9.01.2013 - 18:07)
$exec(`cd output; rar a yarmarka .`);

А у тебя $exec - это что? Переменная, содержащая имя функции или что-то еще???

Либо это функция exec(), к которой ты доллар "присобачил"?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
SergSerg
Цитата (sergeiss @ 9.01.2013 - 17:31)
Цитата (SergSerg @ 9.01.2013 - 18:07)
$exec(`cd output; rar a yarmarka .`);

А у тебя $exec - это что? Переменная, содержащая имя функции или что-то еще???

Либо это функция exec(), к которой ты доллар "присобачил"?

Этот доллар я уже увидел, конечно его нужно убрать, что я и сделал,
!но без него все равно не работает,
причем в консоли из под root все команды работают,
а как пытаюсь выполнить из php скрипта - не выполняется sad.gif

у меня огромное подозрение что здесь дело в допуске... НО как то это можно проверить......

вот увидел информацию про sudo но не могу понять как ее использовать.......
SergSerg
взял от сюда http://php.net/manual/ru/function.system.php
код:
	echo '<pre>';
// Выводит весь результат шелл-команды "ls", и возвращает
// последнюю строку вывода в переменной $last_line. Сохраняет код возврата
// шелл-команды в $retval.

$last_line = system('rar a yarmarka output', $retval);
// Выводим дополнительную информацию
echo '
</pre>
<hr />Последняя строка вывода: '
. $last_line . '
<hr />Код возврата: '
. $retval;

результат:
Последняя строка вывода: Program aborted
Код возврата: 2

ВНИМАНИЕ ВОПРОС: как по коду возврата узнать причину?
чего то не могу список этих кодов обнаружить......

Большое спасибо всем кто отвечал, ну еще раз пните меня в нужную сторону :)
SergSerg
Цитата (Oyeme @ 9.01.2013 - 14:44)
Вы используете "множественные команды."
Попробуйте http://www.php.net/manual/en/function.proc-open.php

да, без функции proc_open обойтись не удалось,
сделал код как показано: kasseler-cms.net/php/function.proc-open.html

все работает!

часть кода:
$descriptorspec = array(
0 => array("pipe", "r"), // stdin - канал, из которого дочерний процесс будет читать
1 => array("pipe", "w"), // stdout - канал, в который дочерний процесс будет записывать
2 => array("file", "/home/php5/domen.ru/www/katalog/error.txt", "a") // stderr - файл для записи
);

// $cwd = '/tmp';
$cwd = '/home/php5/domen.ru/www/katalog/output';
$env = array('some_option' => 'aeiou');

$process = proc_open('rar a -v1024 archiv . img', $descriptorspec, $pipes, $cwd, $env);


архив archiv создается в той же директории (/home/php5/domen.ru/www/katalog/output)

А СЕЙЧАС ВНИМАНИЕ ВОПРОС: Как прописать что бы архив archiv создавался в другой директории?

Ну в общем оказалось все просто вместо rar a -v1024 archiv img
пишем rar a -v1024 /директория_в_которой_сохраняем/archiv img
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.