2011-10-21 2 views
0

私はLinux上でいくつかのコマンドを実行するためにphp system(exec)関数で作業しようとしていますが、うまくいきません!

私はrootユーザーでシステムにログインしました。私は "/1.txt"ファイルを作成して、このPHPスクリプトをApacheサーバー経由で実行しました:system("sudo cp /1.txt /2.txt", $out);しかし、ファイルをコピーしません。

なぜ機能しないのか説明できますか? (私はLinux OSには新しく説明します)

+1

あなたは 'sudo'のパスワードを与えていないでしょうか? – Ryan

+0

sudoのパスワードはどうすればいいですか? – EBAG

答えて

2

sudoを削除し、/1.txtと/2.txtのApacheユーザーに権限を与えても問題ありません。

/2.txtが存在しない場合は、ディレクトリを作成し、そのディレクトリに1.txtを入れ、ディレクトリとファイルの両方にアクセス許可を与えます。

0

/1.txtと/2.txtは、ファイルシステムの最上位にあります。それはあなたがやろうとしていることですか?いずれにせよ、それは良い考えではありません。

私は例の/ var/webappの-ファイル/あなたが何かを行うことができる方法を、あなたのファイルがである面積を有するお勧めします:

define('WEBAPP_FILES_LOCATION', '/var/webapp-files'); 
system("cp ".WEBAPP_FILES_LOCATION."/1.txt ".WEBAPP_FILES_LOCATION."/2.txt", $out); 

注:私は定数を定義したがあなたがいつでもそれを変更したい場合は、あなた自身を繰り返すことをやりたくないからです。システムコマンドを実行しているこれが何をやる

cp /var/webapp-files/1.txt /var/webapp-files/2.txt 

はあなたの/ var/webappの-filesディレクトリがApacheのユーザーのための書き込みアクセスを持っている 場合は成功するはずです。

しかし... PHPには、より一般的で危険なシステム()の代わりに使用することをお勧めするコピー用の組み込み関数があります。

define('WEBAPP_FILES_LOCATION', '/var/webapp-files'); 
$copySucceeded = copy(WEBAPP_FILES_LOCATION."/1.txt", WEBAPP_FILES_LOCATION."/2.txt"); 
echo "The copy attempt ". ($copySucceeded ? "succeeded" : "failed"); 

役立ちます希望:あなたはCPがそうあなたが私の前の例をリファクタリングすることができないようhttp://uk3.php.net/manual/en/function.copy.phpでこれは完全なパスが必要になります)(コピーについて読むことができます。