2010-02-08 152 views
13

我想运行一个使用PHP的Python程序。代码如下让PHP运行一个Python脚本

$command = '/usr/local/bin/python script.py file'; 
$temp = exec($command, $output); 

这可以通过命令行工作,但不通过浏览器运行。我正在使用Apache,因此它可能需要正确的权限?我对Linux非常陌生,不知道如何让它工作。

任何帮助,将不胜感激!

编辑1:

尽量选用proc_open但没有任何反应。我给了脚本的完整路径。使脚本可执行但没有运气。任何其他的事情,我可以尝试在服务器上? (这是一个CentOS 5)

+0

不要做这样的,如果你有任何真正的流量。运行一个新的python脚本(不含mod-python)会让你付出沉重的代价。设置一个单独的,长期运行的python服务器(xml-rpc服务器?),如果需要扩展,则使用IPC来调用它。 – wisty 2010-02-08 07:25:30

+0

谢谢!只是想把这个做成一个演示。然而,要解决mod_wsgi/mod_python – Abhinav 2010-02-08 11:54:23

回答

6

您需要将完整路径传递给脚本,并且还需要确保脚本可以由运行Web服务器的用户读取(这意味着路径中的每个目录都必须为Web用户的+ x)。

+0

做了这两件事情。不工作。:( – Abhinav 2010-02-10 13:52:19

+0

只是为了涵盖所有的基础,你实际上正在打印$输出,对吗?你还应该试着找出你的web服务器是否正在运行chroot。 – jdizzle 2010-02-10 20:06:33

2

几个检查站

  • script.py应通过完整的路径,例如,/home/abhinav/script.py
  • script.py应该是可执行的,chmod +x script.py
+4

“script.py应该是可执行的”,而不是解释器被调用。 – LiraNuna 2010-02-08 06:48:57

+0

谢谢,'#!/ usr/local/bin/python'需要在第一行script.py – YOU 2010-02-08 06:50:17

+1

如果您使用解释器来调用脚本('python ') – ZeissS 2010-02-08 07:48:01

6

意识到什么是错的:

  1. 域名已设置为虚拟主机,并启用了PHP的safe_mode设置。 proc_open,exec,system,passthru等不能在safe_mode下工作我想。

  2. 将脚本放入vhost可访问的目录中。 Apache无法访问vhost文档根目录之外的目录。

感谢您的帮助!

+0

你能解释你如何设置第2点的权限吗? – slash89mf 2016-09-19 20:16:28

0

为了让我的CodeIgniter助手运行一个python脚本,我不得不将#!/ usr/bin/python放在我的python脚本的第一行,而不是从exec调用python。

+1也做搭配chmod + X

帮助我的是这样的:

<?php 
    function scrape($site, $key, $user_id) 
    { 
     $cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id"; 
     $resp = exec($cmd, $out); 
     return $out; 
    } 
?>