ない
<?php system('php file.php'); ?>
または
<?php system('/usr/bin/php file.php'); ?>
働きました。なんで?
-q
、!#/usr/bin/php
などで試しました。
-f で呼び出すことになっていますが、それがなくても動作するはずです:
<?php system('/usr/bin/php -f file.php'); ?>
「うまくいかない」とはどういう意味ですか?
コンテンツをスクリプトからのように出力したかったですか? includeまたはrequireを使用します。
変数の内容が必要でしたか? バックティック演算子を使用します。
システムの代わりにバックティック演算子を使用すると、コマンドから返される内容を確認できます。
セーフモードが原因である可能性があります。
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.
着替えたら
system('/usr/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
にとって
('/bin/php -f /Applications/MAMP/htdocs/a.php',$b);
5ではなく127と表示されます。これらはエラーコードだと思います。
試す:
$output = array();
$returnCode = 0;
exec('/usr/bin/php -f /Applications/MAMP/htdocs/a.php 2>&1', $output, $returnCode);
print_r($output);
stderrをstdoutに2>&1
リダイレクトするため、エラーメッセージはすべてでキャプチャされます。$output
ちょっと待ってください...ここで実際に何を達成しようとしていますか?a.phpを実行して、出力をブラウザに返すだけですか?その場合は、それを含めてください。a.php(<?php echo'hello world';?>)の投稿されたコンテンツの外観から、それはあなたが望むもののようです。
a.phpの内容が他にもある場合は、投稿して、本当にやりたいことを説明してください。
}} 「動作しない」ということは、何も返さないか、出力しないという意味です。
サーバーで端末/シェルを取得して、システムコマンドを試してください。OS が unixy の場合、which phpのようなものを使用して、php cli への正しいパスを見つけることができます。
あなたはphp cliを正しくインストールしましたか?通常、デフォルトではインストールされません。
Web サーバーは chroot などを行っていますか? system() を使用しようとしている環境に php cli が存在しない可能性があります。
スクリプトを呼び出す代わりに、単純なsystem('php -v')を実行してみてください。PHP のバージョン番号が正しく出力されたら、その呼び出しをスクリプトに追加します。
試す:
$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;
これにより、サブシェルの出力をキャプチャしてエラーをトラップできます。
これ以上の情報がなければ...おそらくPHP実行ファイルへのパス、file.phpへのパス、またはファイルのアクセス許可の問題です。
「file.php」にフルパスを渡すとどうなりますか?
また、出力 (stdout と stderr を除く) をファイルにリダイレクトして、生成されたエラー メッセージを確認できるようにしてください。
皆さん回答ありがとうございます!!
「動作しない」とは、何も返さないか、出力しないという意味です。
私は 2 つのファイル 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'; ?>
ブラウザ (localhost/b.php) から b.php を実行すると、次のように表示されます。
文字列(0) "" -int(5)
つまり $b 変数は 5 ですが... 5 なに?
エラー報告をオンにすると、何と表示されますか?
<?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);
あなたは明らかにシステム機能がどのように機能するかを理解していません。あなたが本当に必要としているのはおそらくpopenです。popenでプロセスを開始し、たとえばfgetsでその出力を読み取ります。
または、他の人がすでに提案しているように、バックティック演算子を使用することもできます。