Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP从bash脚本获取返回值_Php_Shell - Fatal编程技术网

使用PHP从bash脚本获取返回值

使用PHP从bash脚本获取返回值,php,shell,Php,Shell,如何用PHP执行shell文件 我有一个名为sync.sh的文件,那么如何在php中运行该文件,以及如何在完成执行后获取响应呢?我认为shell\u exec()将有助于触发该文件,但如何才能得到脚本是否正确完成任务的响应?查看该函数。您可以传入一个return_var,它将保存shell脚本的退出代码 $out = array(); $status = -1; exec( '/path/to/sync.sh', $out, $status ); if ( $status != 0 ) {

如何用PHP执行shell文件

我有一个名为sync.sh的文件,那么如何在php中运行该文件,以及如何在完成执行后获取响应呢?我认为
shell\u exec()
将有助于触发该文件,但如何才能得到脚本是否正确完成任务的响应?

查看该函数。您可以传入一个return_var,它将保存shell脚本的退出代码

$out = array();
$status = -1;

exec( '/path/to/sync.sh', $out, $status );

if ( $status != 0 ) {
    // shell script indicated an error return
}
需要注意的一点是,脚本将使用web服务器的权限运行,而不是您自己的用户权限

此外,请务必注意doc的安全相关警告:

当允许将用户提供的数据传递到此函数时,请使用 escapeshellarg()或escapeshellcmd()以确保用户不会欺骗 该系统允许执行任意命令

根据报告:

返回值

已执行命令的输出,如果发生错误,则为NULL

只需获取该函数的返回值

$result = shell_exec('sync.sh');

$result
将包含您想要的内容。

问题是,我的同步文件位于/home/administrator/scripts,因此命令将访问外部的www文件夹?@SubhojitMukherjee这取决于PHP的设置方式,但通常是可能的。只需给出脚本的绝对路径。我知道这很旧,但必须这样做,我想在这里发表评论:请注意,如果您将PHP脚本作为web应用程序的一部分运行,那么用户将是在web服务器上下文中运行的用户,而不是在命令行上下文中运行的用户。因此,您可以以用户身份登录并测试脚本,脚本可以正常工作,但作为web应用程序的一部分,它会失败,因为web服务器不会以登录用户的身份运行。为了实现这一点:“sudo-u username/path”,其中username是脚本所有者的名称,path是脚本的完整路径。我想我需要管理员权限来运行该命令以及位于/home/administrator/scripts此路径中的脚本。我认为web服务器无权访问/var/www文件夹之外的内容。是吗?@SubhojitMukherjee您对脚本设置了权限以便Web服务器可以运行它吗?(例如,“chmod o+rx sync.sh”)。当您从用户帐户运行脚本时,脚本是否工作?请尝试
sh sync.sh
。这并不要求sync.sh是可执行的。