以下是我在php文件中的部分代码:
function checkSetStatus($checkSet) {
//other if options here
if ($checkSet == '2') {
exec('echo 0 > ~/cctv_config/cctvstatus.log');
sleep(1);
exec('echo "$(date) | setOff" >> weblog.log');
return (int) exec('cat ~/cctv_config/cctvstatus');
}
}
问题在于行:
exec('echo 0 > ~/cctv_config/cctvstatus.log');
当我触发命令
时echo 0 > ~/cctv_config/cctvstatus.log
在linux命令行中,它运行正常。但是,如果它是由php文件中的exec函数间接触发的,则它不会对目标文件进行任何更改。
在apache错误日志文件中有信息
无法创建文件或目录〜/ cctv_config / cctvstatus.log
(我已经将cctvstatus.log的模式更改为777)。触发此行时会记录类似的信息:
exec('cat ~/cctv_config/cctvstatus');
在这种情况下,记录了这样的文件或目录不存在(还有一个问题 - 在exec中使用cat我想知道是否应该使用passthru函数)。
答案 0 :(得分:0)
PHP实例用户的主目录与您测试命令的用户不同。
您正在使用路径前的~
(代字号)来访问主目录。
改为将路径改为完整路径:
function checkSetStatus($checkSet) {
//other if options here
if ($checkSet == '2') {
exec('echo 0 > /home/myuser/cctv_config/cctvstatus.log');
sleep(1);
exec('echo "$(date) | setOff" >> weblog.log');
return (int) exec('cat /home/myuser/cctv_config/cctvstatus');
}
}