我有一个问题,我不能shell_exec(),但它只是不起作用。有没有问题whit shell_exec()或者它不能以某种方式运行myfile.sh .. 如果我在shell中运行代码,它工作正常。我的PHP不会在安全模式下运行,我确实从php.ini文件检查它,我也检查了disable_functions。 我的PHP代码现在返回null。我也尝试过测试目的:
$result = exec('myfile.sh', $output, $status);
我得到了:
array(0){}int(127)
两个文件都有chmod 775读取和执行预设。 我有文件message.php看起来像什么
<?php
$user = "username";
$pass = "pass";
$from = "from who";
$to = "1234567";
$msg = "test message";
$host="https://web.myurl.ee:portnr/etc/etc";
$handle = curl_init($host);
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_exec($handle);
$res = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($res >= 400){
exit;
}else if($res < 200){
exit;
}else{
if(function_exists('shell_exec') && !ini_get('safe_mode')){
$file = 'myfile.sh';
if(file_exists($file)){
$result = shell_exec($file ."$user $pass $from $to $msg");
var_dump($result);
}else{
echo "No files";
}
}else{
echo "check status";
}
}
?>
和myfile.sh文件看起来像
#!/bin/sh
if [$# -ne 5 ]; then
echo"jahas"
exit 1
fi
etc...
我想念的是什么,任何提示看什么或下一步做什么。
在代码中可能有些错误,我没有复制粘贴它。
答案 0 :(得分:0)
这里要检查两件事:
首先确定是否在php.ini中禁用了exec和shell_exec
disable_functions = exec
exex()接受命令而没有文件,如果我没有弄错的话,而不是简单地添加你应该尝试的文件名:
exec(dirname( FILE )。&#39; /myfile.sh');
使用正确的目录并实际传递命令而不是文件名。
答案 1 :(得分:0)
您可以使用绝对路径或相对路径。对于相对路径,当前目录通常是PHP文件。如果即使使用绝对路径也无法访问脚本,则文件系统访问权限可能存在问题。请记住,PHP脚本通常作为Web服务器的(系统)用户帐户执行。
您的shell脚本应该存储在应用程序树附近或内部的某个位置,这样您就可以将访问权限授予PHP脚本(即Web服务器),而不会过多地损害您的文件系统安全性。