【问题标题】:Running a shell script and then displaying contents of a file from PHP运行 shell 脚本,然后显示 PHP 文件的内容
【发布时间】:2018-10-09 10:25:06
【问题描述】:

我有一个 PHP 页面(位于:/var/www/),它必须运行一个 shell 脚本(位于:/home/anas/kaldi/egs/voxforge/s5/new_run.sh)和文本文件(位于:/home/anas/kaldi/egs/voxforge/s5/results/text.txt) 脚本运行大约 10 到 15 秒后将生成。

我只想单击 PHP 中的按钮并运行脚本,当在相应目录中创建文本文件时,它应该显示在 PHP 页面上。

我遇到的问题是文本文件没有被更新。它和我手动执行 shell 脚本时创建的一样旧。 (输出必须改变。)

脚本未运行或未创建文本文件。我现在不知道该怎么办。

到目前为止我已经这样做了:

final.php

<html>

<body>
  <?php
if (isset($_POST['Submit1'])) {
 echo shell_exec('sh /home/anas/kaldi/egs/voxforge/s5/new_run.sh');
sleep(15);
echo file_get_contents("/home/anas/kaldi/egs/voxforge/s5/results/text.txt");
  }
 ?>
    <form action="final.php" method="post">
      <input Name="Submit1" type="submit">
    </form>

</body>

</html>

【问题讨论】:

  • new_run.sh 应该回应什么吗? shell_exec() 调用运行时,您是否在网页上看到该输出?
  • 是的,它应该回显。这是一个很长的脚本。不,当 shell_exec() 调用运行时,我看不到任何类型的输出。
  • 这意味着脚本无法执行(shell_exec() 返回null 如果有错误如果脚本没有生成任何输出,在这种情况下它是可能是前者)。 PHP 以哪个系统用户身份运行 (echo shell_exec('whoami');),如果该用户不是“anas”,/home/anas 有哪些 文件夹 权限?
  • echo shell_exec('whoami'); 返回的 www-data 似乎不正确。
  • 事实上,确实如此。这是大多数网络服务器(Apache、nginx)运行的默认用户。可能不允许该用户访问 /home/anas。如果将脚本移出该文件夹,脚本是否有效?对于测试,您可以尝试将脚本移动到 /tmp,每个人都可以访问。

标签: php linux shell ubuntu


【解决方案1】:

根据我的实验结果,这是由于权限问题。

我创建了两个文件:

example.sh

#!/bin/bash
echo 123

index.php

<?php
echo shell_exec("sh /path/to/stackoverflow/example.sh");
echo "done";

example.sh的权限为777时,一切正常。

example.sh的权限为000时,

会在终端输出权限不足,在浏览器中不会输出任何内容。

我注意到你应该在浏览器环境中,所以不会输出任何内容,也不会出现错误

【讨论】:

  • 把权限改成777还是不行。 echo shell_exec() 没有回应任何内容,text.txt 也没有更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 2015-08-19
  • 2014-08-06
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多