PHP exec()在命令行但在网络中不起作用
我试图在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。
尝试把:
putenv("PYTHONIOENCODING=utf-8");
在脚本中调用
前exec()
。 googler
显然需要设置区域设置或此环境变量。
谢谢你,完美的工作! :) –
必须从disable_functions
参数在php.ini文件中删除exec
为您的服务器模块安装PHP(这是独立于您的CLI安装)的。它通常在服务器模块默认情况下是禁用的。
我已经能够成功执行'exec(“whoami”)',所以这不是问题。 –
我对不正确的答案表示歉意。我根据所提供的信息给出了我最好的猜测。 –
也许'googler'不在'$ PATH'中,请尝试使用完整路径名。 – Barmar
在发送到'exec()'的命令末尾用'2>&1'捕获错误输出。 – Barmar
PHP给你的实际错误是什么? – Mike