нисистема ('php file.php'); не работает, почему?
<?php system('php file.php'); ?>
ни
<?php system('/usr/bin/php file.php'); ?>
работал. Зачем?
Я попытался с -q
, с !#/usr/bin/php
т.д.
нисистема ('php file.php'); не работает, почему?
<?php system('php file.php'); ?>
ни
<?php system('/usr/bin/php file.php'); ?>
работал. Зачем?
Я попытался с -q
, с !#/usr/bin/php
т.д.
Без дополнительной информации ... это, вероятно, путь к PHP исполняемый файл, путь к file.php или проблемы с правами доступа файлов.
Вы должны назвать его -f, но он должен работать без него, а также:
<?php system('/usr/bin/php -f file.php'); ?>
Что вы имеете в виду под «не работает»?
Вы хотите, чтобы содержимое выводилось так, как если бы оно было из вашего скрипта? Используйте include или require.
Вы хотите, чтобы содержимое в переменной? Используйте backtick operator.
Вы можете видеть, что вы получаете от команды, используя оператор backtick вместо системы.
Что происходит, когда вы передаете полный путь к файлу file.php?
Также попробуйте перенаправить вывод (но stdout и stderr) в файл, чтобы вы могли видеть генерируемые сообщения об ошибках.
Возможно, это связано с безопасным режимом.
Note: When safe mode is enabled, you can only execute files within the safe_mode_exec_dir. For practical reasons, it is currently not allowed to have .. components in the path to the executable.
Спасибо всем за ответ !!
Для «не работает» Я имел в виду: он ничего не возвращает и не печатает.
У меня есть два файла a.php & & b.php (со всеми разрешениями) и safe_mode выключен
b.php
<?php
$a = system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
print_r($a);
echo '-'; # for separation
print_r($b); ?>
и a.php
<?php echo 'hello world'; ?>
и когда я запускаю b.php из своего браузера (localhost/b.php), он печатает:
строка (0) "" -INT (5)
это означает, что переменная $ Ь 5, но ... 5 что?
Привет, Barrendo, stackoverflow не похож на форум. Вы должны действительно изменить свой исходный вопрос и добавить эту информацию, чтобы ее было легче найти. – 2008-10-13 15:07:47
Что говорится, когда вы включаете отчеты об ошибках?
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
$a = system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
print_r($a);
echo '-'; # for separation
print_r($b);
Когда я изменяю
system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
для
('/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
то говорит 127 вместо 5, я предполагаю, что эти коды ошибок
Вы, очевидно, не понимают, как system функция работы. Вероятно, вам действительно нужно popen. Запустите процесс с popen, а затем прочитайте его вывод с помощью fgets.
В качестве альтернативы вы можете использовать оператор обратной связи, как уже было предложено другими.
Try:
$output = array();
$returnCode = 0;
exec('/usr/bin/php -f /Applications/MAMP/htdocs/a.php 2>&1', $output, $returnCode);
print_r($output);
2>&1
перенаправляет STDERR на стандартный вывод, поэтому любые сообщения об ошибках будут захвачены в $output
Держись ... Что вы на самом деле пытаетесь достичь здесь? Просто запустите a.php и верните вывод в браузер? В этом случае include это. Из взглядов вашего размещенного содержимого a.php (<? Php echo 'hello world';? >), это похоже на то, что вы хотите.
Если есть больше информации о содержании a.php, отправьте сообщение и объясните, что вы действительно хотите сделать.
Try:
$fp = popen('/usr/bin/php -f file.php', 'r');
if(false === $fp)
{
// something bad happened: error handle
}
$contents = '';
while(false === feof($fp))
{
$contents .= fgets($fp);
}
fclose($fp);
echo $contents;
Это позволит вам захватить вывод подоболочка в ловушку и ошибок.
}} Для «не работает» я имел в виду: он ничего не возвращает и не печатает.
Попробуйте подключиться к терминалу/оболочке на своем сервере и попробовать свою системную команду. Если ваша ОС является unixy, вы можете использовать что-то вроде , которое php, чтобы найти правильный путь к php cli.
Вы правильно установили php cli? Обычно он не устанавливается по умолчанию.
Ваш веб-сервер делает chroot или что-то еще? Возможно, php cli не существует в среде, где вы пытаетесь использовать system().
Вместо того чтобы пытаться вызвать скрипт, попробуйте сделать простую систему ('php -v'). Как только вы получите это, чтобы правильно вывести номер версии php, добавьте вызов к вашему скрипту.
Я думаю, что вы были заблокированы, потому что «не работает» является абсолютным «нет, нет» при описании проблемы. Перефразируйте свой вопрос и повторите попытку. :) – Till 2008-10-13 08:57:03
Я не спустил вас вниз, но я думаю, что Тилль прав. Можете ли вы рассказать о том, что вы пытаетесь сделать и каков текущий результат? – 2008-10-13 11:18:39