【问题标题】:PHP - shell_exec seems like having time limitPHP - shell_exec 似乎有时间限制
【发布时间】:2018-12-25 14:49:27
【问题描述】:

我正在运行 python 脚本,同时在线运行 php 脚本。因为调试,我做了一个 php 脚本:

<?php
echo shell_exec("python ../reader.py");

如果使用php test.php 运行它(在Linux 上),它可以工作并输出一些数据。但是如果我尝试访问网络上的输出,它会返回一个空字符串。

reader.py 需要 8 秒(因此不应达到时间限制)。
reader.py:

#!/usr/bin/env python
import sys
import Adafruit_DHT

sensor = Adafruit_DHT.DHT11;
pin = 4;

humiture, temperature = Adafruit_DHT.read_retry(sensor, pin)

if humiture is not None and temperature is not None:
    print("{\"temperature\": " + str(temperature) + ", \"humiture\":"  + str(humiture) + "}")
else:
    print("fail")

ls 等其他一些命令将始终有效。

我认为持续时间有问题,但我该如何解决这个问题?

解决方案: 解决了我授予权限的问题:

sudo chmod g+s /var/www  
sudo chmod 775 /var/www  
sudo chown -R www-data:www-data /var/www

【问题讨论】:

  • 这太不具体了。向我们展示一些代码,例如调用 php 脚本的位置以及它的作用。
  • 确保路径或文件权限没有任何问题。从专门使用绝对路径开始。当您使用命令行调用脚本时,它将使用您登录的用户和环境。如果您通过 Web 服务器执行脚本,它将使用 Web 服务器正在使用的用户和环境(如使用 Apache 时的 www-root)。
  • 你应该可以自己轻松回答超时问题,只需创建一个需要一定时间的脚本。
  • 使用 php $out = system(....) 可能会有所帮助。它是连续的,所以代码将等到结束来填充 $out 变量。
  • @digijay 我更新了我的帖子

标签: php shell time


【解决方案1】:

可能是您的 Web 服务器作为用户运行,并且脚本在从网页运行时继承其权限,不允许访问硬件,并返回空的温度和湿度 - 或根本没有。

另一种可能是 PHP 脚本在您想象的其他地方执行,并且找不到要启动的 reader.py 脚本。

尝试使用“ls ../reader.py”查看脚本是否可以访问,然后运行

"python ../reader.py 2>&1"

还可以从 python 生成中收集任何错误。顺便说一句,python 可执行文件是否可以访问?您是否尝试过只打印“Hello world”的空 reader2.py?

【讨论】:

  • facepalm 哦,你是对的^^。非常感谢。我需要授予 www-data 权限。将更新发布我所做的事情^^
  • @Husi012 - 你应该接受这个答案,而不是更新你的帖子。
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2015-01-12
  • 1970-01-01
相关资源
最近更新 更多