1

我的 Web 服务器上有一个 PHP 文件,它应该调用一个 python 脚本(同一文件夹),该脚本写出一个文件,然后获取其内容并显示数据。

PHP文件被称为q.php

它包含

<?php
   $tmp = exec("trivia.py");
   sleep(4);
   $homepage = file_get_contents('./testfile.txt', true);
   echo $homepage + '<p>exec ret:' + $tmp;
   echo exec("whoami");
?>

该文件调用 a trivia.py,它写出一个文件(“./testfile.txt”),然后 php 从文件中获取数据并显示它。我添加了一个变量来查看 exec 是否正在工作并返回0. PHP 服务器正在由 user 执行http

现在trivia.py,我在文件顶部有以下行

#!/usr/bin/env python

当我通过 SSH 连接到服务器时,它执行得非常好。我从 SSH 运行脚本,它会创建上面指定的文件,并且网页可以正常工作。但是,如果我使用 PHP 文件来创建它,它将无法在网络上运行。

我很确定这与某处的权限有关,但我对 Linux 的权限不是很好。

系统信息:Synology Diskstation、DSM5、PHP5、Python 2.7

编辑:

trivia.pycurrenlty 拥有 777 作为admin所有者和组的权限users

4

2 回答 2

0

通过 exec 运行文件时,您需要提供文件的完整路径,文件是否在同一目录中无关紧要。

请尝试一下(假设文件在 /var/www/public 中)

exec('/var/www/public/trivia.py');
于 2014-12-28T22:06:11.813 回答
-1

对于 Windows 用户 - 问题已在此处解决PHP exec python

我建议更换$tmp = exec("trivia.py");这个

$tmp = exec("C:\\Python27\\python.exe trivia.py");

// Add your python.exe route before the file

希望它有效!

于 2017-06-30T18:13:41.910 回答