2017-12-20 11 views
2

私はredhat linuxに以下のPHPスクリプト(test.php)を持っています。シェルコマンド 'touch'がPHPで動作しない

<?php 
shell_exec('touch /var/www/html/test.txt'); 
?> 

私は、コマンドライン(PHPのtest.phpを)で、このスクリプトを実行すると、期待どおりに動作しています。 しかし、私がブラウザ(http://hostname/test.php)でtest.phpを実行すると、ファイルtest.txtが作成されません。

は私がALL =(ALL)NOPASSWD編集のsudo visudoをWWWのデータを試してみました:ALL

は、この上で私を助けてください!

答えて

0

私はゲストのためコマンドラインで実行するとあなたのユーザーとして実行しますが、ブラウザで実行するとWebサービスのユーザーとして実行されるので、/var/www/html/ディレクトリのアクセス許可を確認し、 755に許可し、Webサービスへの所有者を変更する(Apacheの、apache2のなどあなたがウェブserivceとして持っている)

PHPはそれがうまく実行されますので、

chown -R apache:apache /var/www/html/ (I'm not sure about your web-service, change it your webserice and it's group) 
chmod -R 755 /var/www/html/ 
+0

感謝。 –

0

。しかし、システムはそれを検索しなければならないpathesにtouchを見つけません。

最も簡単なのは、フルパスをtouchにすることです。私のシステムでtouch

$whereis touch 
touch: /usr/bin/touch /bin/touch /usr/share/man/man1/touch.1.gz 

を見つけるために、コマンドwhereisを使用してそうスクリプトは次のようになります。Zhilevanは...あなたのソリューションは私の問題を解決し

<?php 
shell_exec('/usr/bin/touch /var/www/html/test.txt'); 
?> 
+0

お返事ありがとうございます。ファイルの所有者をapacheとして変更することで解決されました。 –

+0

興味深いことに、情報のためのthx – user5542121

関連する問題