PHP exec()在命令行中工作,但在Web中不工作

时间:2017-07-05 23:28:32

标签: php exec raspbian

我正在尝试在PHP脚本中使用jarun的“googler”来搜索YouTube并找到第一个结果的URL。我正在执行的命令是googler --np --json -C -n 1 -w youtube.com -x <name of youtube video>,它在我的本地机器上完美运行。这是我的代码:

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

当我在命令行中执行它时,它可以正常工作,但是当我通过Web浏览器或GET请求执行它时,它不起作用。我知道它正在以另一个用户身份执行。就我而言,它是用户www-data,因此我在没有密码的情况下为该用户提供了完整的sudo权限,并执行了以下命令:

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'

这些都没有奏效。这与googler有关吗?我做错了什么?

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

  

检测到stdout编码'ascii'。 googler需要utf-8才能正常工作。错误的编码可能是由于非UTF-8语言环境或不正确的PYTHONIOENCODING造成的。 (对于记录,您的语言环境语言是和语言环境编码;您的PYTHONIOENCODING未设置。)请设置UTF-8语言环境(例如,en_US.UTF-8)或将PYTHONIOENCODING设置为utf-8。

2 个答案:

答案 0 :(得分:2)

尝试推杆:

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

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

答案 1 :(得分:0)

您必须从php.ini文件中的exec参数中删除disable_functions,以便安装PHP的服务器模块(与CLI安装不同)。默认情况下,服务器模块通常会禁用它。