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



我正在尝试在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'

这些都不起作用。它与谷歌人有关吗?我做错了什么?

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

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

尝试推杆:

putenv("PYTHONIOENCODING=utf-8");

在调用exec()之前的脚本中。googler显然需要设置区域设置或此环境变量。

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

最新更新