0

何が起こっているのかわかりません。コマンドを介して他のシェルコマンドを実行でき、exec()正常に動作します。それは明らかにどこかの許可と関係がありますが、私にはわかりません。私はこれを多くの異なるサーバーで試しましたが、うまくいくものもあればうまくいかないものもあります。すべてCentOSを実行していました。セーフモードは常にオフです。

これは私が仕事をしようとしているコードです:

<?php
error_reporting(E_ALL);

if( ini_get('safe_mode') ){
   echo "safe mode is on";
}else{
   echo "safe mode is not on";
}
echo "\n\n";

echo "Start Server.....\n";

//exec("screen -clean", $err, $err1);
//exec("mkdir /var/test/tewst/");

exec("screen -dms test1 mkdir /var/test/test1/", $err, $err1);

print_r($err);
echo "\n" . $err1;
echo "\nCommands sent...";

?>

返されるすべてのことはこれです:

safe mode is not on

Start Server.....
Array
(
    [0] => Cannot make directory '/var/run/screen': File exists
)

1
Commands sent...

誰でもこれに光を当てることができますか?

4

1 に答える 1

0

更新:これは SELinux が原因でした。

--

奇妙なファイル システム/ユーザー権限エラーであることがわかりました。PHP でコマンドを実行ls -al /var/runすると、次のように返されました。exec()

total 52
drwxrwxrwx. 23 root   root   4096 Oct 12 15:13 .
drwxr-xr-x. 22 root   root   4096 Oct 10 08:50 ..
d??????????  ? ?      ?         ?            ? ConsoleKit
drwxr-xr-x.  2 root   root   4096 Oct 11 18:13 abrt
-rw-r--r--.  1 root   root      5 Oct 11 18:13 abrtd.pid
-??????????  ? ?      ?         ?            ? acpid.pid
s??????????  ? ?      ?         ?            ? acpid.socket
-??????????  ? ?      ?         ?            ? atd.pid
-??????????  ? ?      ?         ?            ? auditd.pid
-??????????  ? ?      ?         ?            ? autofs-running
p??????????  ? ?      ?         ?            ? autofs.fifo-misc
p??????????  ? ?      ?         ?            ? autofs.fifo-net
-??????????  ? ?      ?         ?            ? autofs.pid
drwxr-xr-x.  2 root   root   4096 Feb 22  2013 certmonger
-??????????  ? ?      ?         ?            ? certmonger.pid
d??????????  ? ?      ?         ?            ? console
-??????????  ? ?      ?         ?            ? cron.reboot
-??????????  ? ?      ?         ?            ? crond.pid
d??????????  ? ?      ?         ?            ? cups
-??????????  ? ?      ?         ?            ? cupsd.pid
drwxr-xr-x.  2 root   root   4096 Oct 11 18:13 dbus
drwxr-xr-x.  2 root   root   4096 Feb 21  2013 faillock
d??????????  ? ?      ?         ?            ? hald
-??????????  ? ?      ?         ?            ? haldaemon.pid
drwx--x---.  2 root   apache 4096 Oct 12 15:26 httpd
d??????????  ? ?      ?         ?            ? lvm
s??????????  ? ?      ?         ?            ? mcelog-client
-??????????  ? ?      ?         ?            ? mcelog.pid
d??????????  ? ?      ?         ?            ? mdadm
-??????????  ? ?      ?         ?            ? messagebus.pid
drwxr-xr-x.  2 mysql  mysql  4096 Oct 11 18:13 mysqld
drwxrwxr-x.  2 root   root   4096 Feb 22  2013 netreport
d??????????  ? ?      ?         ?            ? plymouth
d??????????  ? ?      ?         ?            ? pm-utils
d??????????  ? ?      ?         ?            ? portreserve
-??????????  ? ?      ?         ?            ? rpc.statd.pid
-??????????  ? ?      ?         ?            ? rpcbind.lock
-??????????  ? ?      ?         ?            ? rpcbind.pid
s??????????  ? ?      ?         ?            ? rpcbind.sock
d??????????  ? ?      ?         ?            ? saslauthd
d??????????  ? ?      ?         ?            ? screen
d??????????  ? ?      ?         ?            ? sepermit
drwxr-xr-x.  2 root   root   4096 May 10 05:06 setrans
-??????????  ? ?      ?         ?            ? sm-notify.pid
-??????????  ? ?      ?         ?            ? sshd.pid
-??????????  ? ?      ?         ?            ? syslogd.pid
-??????????  ? ?      ?         ?            ? utmp
drwxr-xr-x.  2 root   root   4096 Feb 21  2013 winbindd

ディレクトリを削除し、/var/runアクセス許可を 0777 にすることで修正しました。これは、Web サーバー ユーザーがディレクトリを作成し、期待どおりに使用できることを意味していました。

rm /var/run/screen -R -f
chmod 0777 /var/run

lsなぜこれが起こったのか、なぜコマンドのいたるところに疑問符があるのか​​ はまだわかりません。誰かがこれを見て知っている場合は、理由を説明するコメントまたは回答を残してください。もっと多くのエラーがあることを知っているので、それは大きな助けになるでしょう。

于 2013-10-12T19:41:35.590 に答える