【问题标题】:Execute a PHP script from another PHP script从另一个 PHP 脚本执行一个 PHP 脚本
【发布时间】:2011-12-09 19:29:25
【问题描述】:

如何通过使用 php 手动触发来让我的服务器运行 php 脚本?基本上我有一个相当大的 cronjob 文件,每 2 小时运行一次,但我希望能够自己手动触发文件,而不必等待它加载(我希望它在服务器端完成)。

编辑:我想从 php 文件执行文件...不是命令行。

【问题讨论】:

  • 只运行与 cron 相同的命令?还是只做php file.php?
  • 为什么不直接从 crontab 中复制命令并将其粘贴到命令行中?
  • @Rocket 我想从 php 文件中完成
  • 感谢 3 个反对票和 6 个错误答案。什么都不感谢。
  • 答案是不正确的,因为您没有在问题中包含重要细节。鉴于您提供的详细信息,答案是 100% 正确的。现在您已经描述了您实际上想要做什么,答案将会有所改善。很简单,你没有理由不高兴。人们正在努力提供帮助。

标签: php


【解决方案1】:

您可以从命令行手动调用 PHP 脚本

hello.php
<?php
 echo 'hello world!';
?>

Command line:
php hello.php

Output:
hello world!

查看文档:http://php.net/manual/en/features.commandline.php


编辑 OP 编辑​​了问题以添加一个关键细节:该脚本将由另一个脚本执行。

有几种方法。首先也是最简单的,您可以简单地包含该文件。当您包含一个文件时,其中的代码是“执行的”(实际上是解释的)。任何不在函数或类主体中的代码都将被立即处理。查看 include (docs) 和/或 require (docs) 的文档(注意:include_once 和 require_once 是相关的,但在重要方面有所不同。查看文档了解差异)您的代码如下所示:

 include('hello.php');
 /* output
 hello world!
 */

第二个稍微复杂一点的方法是使用shell_exec (docs)。使用shell_exec,您将调用 php 二进制文件并将所需的脚本作为参数传递。您的代码如下所示:

$output = shell_exec('php hello.php');
echo "<pre>$output</pre>";
/* output
hello world!
*/

最后,也是最复杂的,您可以使用 CURL 库来调用文件,就好像它是通过浏览器请求的一样。在此处查看 CURL 库文档:http://us2.php.net/manual/en/ref.curl.php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.myDomain.com/hello.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)

$output = curl_exec($ch);
curl_close($ch);
echo "<pre>$output</pre>";
/* output
hello world!
*/

所用函数的文档

【讨论】:

  • 这将是非常有用的信息,可以包含在您的问题中! :P 查看编辑,我讨论了从另一个调用一个 PHP 脚本的多种方法。
  • 非常感谢您的冗长回复!
  • 关键区别在于使用include/require 解释另一个脚本将在原始脚本的环境中运行它。这意味着它的所有全局变量、ini 设置等。作为 shell 脚本或通过 HTTP 请求运行可确保其他脚本在其自己的独立环境中安全运行,而不会干扰原始环境。
  • 很好的答案@ChrisBaker,我使用了您的 cURL 示例,但我的问题是:在 url 上执行的文件是否安全?还是将整个文件加载到当前的php文件中?
  • @WalidSarkis 我不知道您所说的“安全”是什么意思。它必须是可通过网络访问的,因此拥有该 URL 的任何人都可以访问同一个文件,除非您拨打 localhost 或您采取其他措施防止未经授权的各方访问。这可能是 .htaccess、URL 中的令牌、会话、cookie、Web 服务器配置等。很难猜出你的意思。
【解决方案2】:

你可以使用反引号:

`php file.php`;

你也可以把这个放在php文件的顶部来表示解释器:

#!/usr/bin/php

将其更改为您放置 php.ini 的位置。 然后给文件执行权限,就可以在不指定php的情况下调用文件:

`./file.php`

如果要捕获脚本的输出:

$output = `./file.php`;
echo $output;

【讨论】:

  • 最被低估的答案。来自 PHPs 文档:“反引号运算符的使用与 shell_exec() 相同。”所以$output = `php file.php` 应该也能正常工作
【解决方案3】:

OP 将他的问题细化为如何从脚本调用 php 脚本。 php 语句 'require' 有利于依赖,因为如果找不到所需的脚本,脚本将停止。

#!/usr/bin/php
<?
require '/relative/path/to/someotherscript.php';

/* The above script runs as though executed from within this one. */

printf ("Hello world!\n");

?>

【讨论】:

    【解决方案4】:

    我更喜欢使用

    require_once('phpfile.php');
    

    为您提供很多选择。以及保持物品清洁的好方法。

    【讨论】:

      【解决方案5】:
      <?php
      $output = file_get_contents('http://host/path/another.php?param=value ');
      echo $output;
      ?>
      

      【讨论】:

        【解决方案6】:

        如果它是一个 linux 机器,你会运行类似的东西:

        php /folder/script.php
        

        在 Windows 上,您需要确保 php.exe 文件是 PATH 的一部分,并对要运行的文件执行类似的方法:

        php C:\folder\script.php
        

        【讨论】:

          【解决方案7】:

          打开ssh并手动执行命令?

          php /path/to/your/file.php
          

          【讨论】:

            【解决方案8】:

            在命令行上:

            > php yourfile.php
            

            【讨论】:

              【解决方案9】:

              可能和最简单的单线解决方案是使用:

              file_get_contents("YOUR_REQUESTED_FILE");
              

              或等价,例如 CURL。

              【讨论】:

              • 这不执行 PHP 脚本文件,它返回文件的内容,ergo - 那里写的代码。
              【解决方案10】:

              试试这个:

              header('location: xyz.php'); //thats all for redirecting to another php file
              

              【讨论】:

                【解决方案11】:

                我想这就是你要找的东西

                <?php include ('Scripts/Php/connection.php');
                //The connection.php script is executed inside the current file ?>
                

                脚本文件也可以是 .txt 格式,它应该仍然可以工作,它对我有用

                例如

                <?php include ('Scripts/Php/connection.txt');
                //The connection.txt script is executed inside the current file ?>
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-12-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-10-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多