2008-10-13 3 views
0

нисистема ('php file.php'); не работает, почему?

<?php system('php file.php'); ?> 

ни

<?php system('/usr/bin/php file.php'); ?> 

работал. Зачем?

Я попытался с -q, с !#/usr/bin/php т.д.

+1

Я думаю, что вы были заблокированы, потому что «не работает» является абсолютным «нет, нет» при описании проблемы. Перефразируйте свой вопрос и повторите попытку. :) – Till 2008-10-13 08:57:03

+0

Я не спустил вас вниз, но я думаю, что Тилль прав. Можете ли вы рассказать о том, что вы пытаетесь сделать и каков текущий результат? – 2008-10-13 11:18:39

ответ

0

Без дополнительной информации ... это, вероятно, путь к PHP исполняемый файл, путь к file.php или проблемы с правами доступа файлов.

4

Вы должны назвать его -f, но он должен работать без него, а также:

<?php system('/usr/bin/php -f file.php'); ?> 

Что вы имеете в виду под «не работает»?

Вы хотите, чтобы содержимое выводилось так, как если бы оно было из вашего скрипта? Используйте include или require.

Вы хотите, чтобы содержимое в переменной? Используйте backtick operator.

Вы можете видеть, что вы получаете от команды, используя оператор backtick вместо системы.

0

Что происходит, когда вы передаете полный путь к файлу file.php?

Также попробуйте перенаправить вывод (но stdout и stderr) в файл, чтобы вы могли видеть генерируемые сообщения об ошибках.

1

Возможно, это связано с безопасным режимом.

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. 

http://www.php.net/system.

0

Спасибо всем за ответ !!

Для «не работает» Я имел в виду: он ничего не возвращает и не печатает.

У меня есть два файла 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 что?

+0

Привет, Barrendo, stackoverflow не похож на форум. Вы должны действительно изменить свой исходный вопрос и добавить эту информацию, чтобы ее было легче найти. – 2008-10-13 15:07:47

0

Что говорится, когда вы включаете отчеты об ошибках?

<?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); 
0

Когда я изменяю

system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b); 

для

('/bin/php -f /Applications/MAMP/htdocs/a.php',$b); 

то говорит 127 вместо 5, я предполагаю, что эти коды ошибок

0

Вы, очевидно, не понимают, как system функция работы. Вероятно, вам действительно нужно popen. Запустите процесс с popen, а затем прочитайте его вывод с помощью fgets.

В качестве альтернативы вы можете использовать оператор обратной связи, как уже было предложено другими.

0

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

0

Держись ... Что вы на самом деле пытаетесь достичь здесь? Просто запустите a.php и верните вывод в браузер? В этом случае include это. Из взглядов вашего размещенного содержимого a.php (<? Php echo 'hello world';? >), это похоже на то, что вы хотите.

Если есть больше информации о содержании a.php, отправьте сообщение и объясните, что вы действительно хотите сделать.

0

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; 

Это позволит вам захватить вывод подоболочка в ловушку и ошибок.

0

}} Для «не работает» я имел в виду: он ничего не возвращает и не печатает.

Попробуйте подключиться к терминалу/оболочке на своем сервере и попробовать свою системную команду. Если ваша ОС является unixy, вы можете использовать что-то вроде , которое php, чтобы найти правильный путь к php cli.

Вы правильно установили php cli? Обычно он не устанавливается по умолчанию.

Ваш веб-сервер делает chroot или что-то еще? Возможно, php cli не существует в среде, где вы пытаетесь использовать system().

Вместо того чтобы пытаться вызвать скрипт, попробуйте сделать простую систему ('php -v'). Как только вы получите это, чтобы правильно вывести номер версии php, добавьте вызов к вашему скрипту.

Смежные вопросы