【问题标题】:Run a PHP CLI script from a webpage从网页运行 PHP CLI 脚本
【发布时间】:2011-02-11 12:58:39
【问题描述】:

我有一个(可能是愚蠢的)问题。 我有一个用 php 编写的脚本,专为 cli 使用而构建。当我从命令行运行它时工作正常,那里没有问题。问题是我正在处理的站点对托管服务器有 ssh 限制,我不能在那里运行 ssh。因此我的问题是:如何从另一个可通过网络访问的 php 运行脚本?已经尝试使用 exec()、system() 等。 主要问题是我需要他设置 $_SERVER['SHELL'] 变量,当调用来自网络浏览器时,当然 php 没有设置它。

任何想法都将不胜感激,谢谢。

【问题讨论】:

  • exec() 应该是要走的路。为什么它不起作用?会发生什么?
  • 佩卡说的。请发布您用于 exec()、system() 等的代码。
  • 它不运行不是问题,问题是它与 apache-cgi 解释器一起运行,而不是 php-cli 解释器。在脚本里面我有一个条件if(isset($_SERVER['SHELL'])) 之类的东西。在网络可访问的脚本中,它只是一个 exec("/usr/bin/php ./console.php"); 东西

标签: php command-line-interface


【解决方案1】:

exec() 和相关函数调用不适合您的原因有很多。

  • 您的虚拟主机没有安装 PHP-CLI。只是一个网络服务器模块
  • 您需要使用 php 二进制文件的完整路径,因为缺少合适的 shell 环境。例如。 /usr/bin/php <script> 而不是 php <script>
  • 您的虚拟主机在非标准路径上安装了 PHP-CLI(例如 /usr/local/bin/php/opt/php5/php
  • 网络服务器用户无权访问 php 二进制文件
  • 等等..

【讨论】:

  • 差不多。如果您的主机说他们不支持 CLI 或 PHP-CLI,那么即使您设法让它工作,这只是他们可以关闭的安全漏洞,使您的代码再次无法运行。为什么不简单地重写您的原始脚本,使其同时从 CLI 和网络服务器运行?
  • 这是一个从不同 csv 文件中读取的脚本,其中大多数文件的行数超过 100 万行。使用 cli 它更有效,主要考虑内存和一些 cpu 执行时间和所需的资源。该脚本从 csv 文件中获取数据并将信息写入 mysql 数据库。主要问题是如何以某种方式从 Web 浏览器准确触发脚本,如果我的主机支持 php-cli,这不是问题,因为即使在我的开发服务器上我也找不到执行它的方法,而且我很确定我在那里有cli,我自己“aptitude install”-它自己:)
  • @lost:在这种情况下,您应该能够在您的开发服务器上运行它。你的生产服务器是什么样的?共享主机?专用主机?您自己的具有 root 访问权限的服务器?
  • 一个愚蠢的共享主机,不幸的是。对脚本进行了一些调整,现在可以工作了,尽管执行时间和资源消耗介于 cli 和 cgi 之间:))) 差不多,我只是在 stript 的开头设置了一个条件,说$_SERVER['SHELL']='/bin/bash'; - 糟透了,我知道,但是……不管用什么方法 :) 10x 很多人
【解决方案2】:

也许将 php 脚本更新为包含和 cli 脚本。

使用

__FILE__ 

检查它是否是一个文件,然后读取参数。否则什么都不做。

作为一个包含直接调用你想要的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2017-03-22
    • 2019-04-08
    相关资源
    最近更新 更多