2017-07-05 57 views
0

我试图在PHP脚本中使用jarun的“googler”,以搜索YouTube并找到第一个结果的URL。我正在执行的命令是googler --np --json -C -n 1 -w youtube.com -x <name of youtube video>,它在我的本地机器上完美工作。这里是我的代码:PHP exec()在命令行但在网络中不起作用

<?php 
exec("googler --np --json -C -n 1 -w youtube.com -x thomas the dank engine", $results); 
var_dump($results); 
?> 

当我在命令行中执行此,它完美的作品,因为它应该,但是当我通过网络浏览器或GET请求做到这一点,这是行不通的。我知道它正在作为另一个用户执行。对我来说,它的用户www-data,所以我给了用户充分须藤权限,无需输入密码,并做了以下命令:

sudo -u pi googler --np --json -C -n 1 -w youtube.com -x thomas the dank engine 

以及

su - pi -c 'googler --np --json -C -n 1 -w youtube.com -x thomas the dank engine' 

这些都不奏效。这与Google员工有关吗?我究竟做错了什么?

当添加2>&1到命令时,得到以下错误消息:

标准输出编码 'ASCII' 检测到。 Google员工需要utf-8才能正常工作。错误的编码可能是由于非UTF-8语言环境或不正确的PYTHONIOENCODING。 (为了记录,您的语言环境语言和语言环境编码是;您的PYTHONIOENCODING未设置。)请设置UTF-8语言环境(例如,en_US.UTF-8)或将PYTHONIOENCODING设置为utf-8。

+0

也许'googler'不在'$ PATH'中,请尝试使用完整路径名。 – Barmar

+1

在发送到'exec()'的命令末尾用'2>&1'捕获错误输出。 – Barmar

+0

PHP给你的实际错误是什么? – Mike

回答

1

尝试把:

putenv("PYTHONIOENCODING=utf-8"); 
在脚本中调用

exec()googler显然需要设置区域设置或此环境变量。

+0

谢谢你,完美的工作! :) –

0

必须从disable_functions参数在php.ini文件中删除exec为您的服务器模块安装PHP(这是独立于您的CLI安装)的。它通常在服务器模块默认情况下是禁用的。

+0

我已经能够成功执行'exec(“whoami”)',所以这不是问题。 –

+0

我对不正确的答案表示歉意。我根据所提供的信息给出了我最好的猜测。 –

相关问题