2

他の多くの人と同じように、PHP の shell_exec() 関数に問題があります。セーフ モードを無効にし、php.ini から disabled_functions を削除しました。

ターミナル (php print.php) から php スクリプトを実行すると問題なく動作しますが、Web ブラウザから実行しても何も起こりません。

ここにスクリプトがあります:

<?php

$output = shell_exec('lp print.php');
echo "<pre>$output</pre>";

?>

私を助けてください。Apache2 で PHP 5.3.10 を実行しています。私のOSはUbuntu Server 12.4です。phpinfo ページは次のとおりです: http://testni-server.info/info.php

4

2 に答える 2

1

プログラミング言語PHPを使用すると、構成ディレクティブsafe_mode_exec_dirを介して外部コマンドの実行を制限できます。このディレクティブには、PHPスクリプトが実行できるプログラムを含むディレクトリへのフルパスが含まれている必要があります。スクリプトがこのディレクトリにないコマンドを実行しようとすると、コマンドは実行されません。この構成ディレクティブは、セーフモードが有効になっている場合にのみアクティブになります。これは、ユーザーに対する不要な制限が増えることを意味します。PHPには、セーフモードが無効になっている外部コマンドの実行を制限する可能性はありません。したがって、これは特別なディレクティブexec_dirをPHPに直接追加するパッチです。このディレクティブはsafe_mode_exec_dirに非常に似ていますが、セーフモードを有効にする必要はありません。

このパッチは、これらの関数の動作を制限または修正します。

exec()
passthru()
proc_open()
shell_exec()
system()
popen()
is_executable() 

このパッチは、マルチドメインApacheサーバーでのユーザーの外部コマンドの実行を制限する目的で作成されました。最初はPHPバージョン4.2.1用です。パッチはPHP開発者に送信されたため、PHPの一部である可能性がありますが、PHP開発者の誰も興味を持っていませんでした。一方、一部のPHPユーザーはこのパッチを望んでいたため、このサイトが作成されました。

于 2012-06-17T14:35:18.410 に答える
0

コマンドライン(CLI)PHPは、CGIとは異なる作業ディレクトリやパスを使用している可能性があります。を呼び出す前に、で作業ディレクトリ(lpコマンドを含む)を明示的に定義してみてください。chdir()shell_exec()

于 2012-06-17T14:32:23.413 に答える