我不知道发生了什么。我可以通过exec()
命令运行任何其他shell命令,它工作正常。这显然与某处的权限有关,但我不确定是什么。我在许多不同的服务器上尝试了这个,其中一些工作正常,有些则没有。所有人都在运行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...
任何人都可以对此有所了解吗?
答案 0 :(得分: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
命令中到处都有问号。如果有人看到这个并且知道,请发表评论或回答解释原因。这将是一个很大的帮助,因为我知道有更多的错误。