【问题标题】:How to execute a php script from another php script by using the shell?如何使用 shell 从另一个 php 脚本执行 php 脚本?
【发布时间】:2013-12-26 03:32:22
【问题描述】:

我有一个名为 sample.php 的 php 文件,其内容如下:

<?php
echo "Hello World!";
?>

而我想要做的是使用第二个 php 脚本运行这个 php 脚本。

我认为shell_exec 可以帮助我,但我不知道它的语法。

顺便说一句,我想用cpanel 执行这个文件。所以我必须执行shell。

有什么办法吗?

【问题讨论】:

  • 你宁愿在另一个进程中执行它,调用 shell 等等,而不是简单地include它?
  • 你可以说 include "other_script.php"; 在同一个 PHP 实例中运行脚本,而不是生成另一个解释器。想要一个独特的流程是有正当理由的......但除非你必须这样做,否则include 通常会更好。
  • 不,我必须通过 shell 运行,因为我想做一个 php 在线编辑器
  • 我试过这个 $script_output = shell_exec("php $myfile 2> output");但这段代码什么也没返回。
  • 如果你必须在这里问这个问题,那么你还没有准备好编写一个在线 php 编辑器并处理这将引发的所有安全问题。

标签: php shell shell-exec


【解决方案1】:

如果您需要将 php 文件的输出写入变量,请使用 ob_start 和 ob_get_contents 函数。见下文:

<?php
    ob_start();
    include('myfile.php');
    $myStr = ob_get_contents();
    ob_end_clean();
    echo '>>>>' . $myStr . '<<<<';
?>

所以如果你的 'myfile.php' 包含这个:

<?php
    echo 'test';
?>

那么你的输出将是:

>>>>test<<<<

【讨论】:

  • 您好,我已经尝试过您的建议。有效。但是我正在从编辑器中获取数据并使用此代码将该数据存储到文件中 $d=rand(); $myfile=$d.".php"; //file_put_contents($myfile,"code: ",FILE_APPEND); file_put_contents($myfile,""."\n",FILE_APPEND);所以你可以从我的代码中了解到,每次文件名应该不同。我试过这个 include($myfile);但它返回一个错误,没有找到这样的文件。那么我该怎么做呢
  • 我不确定我是否发现了问题。只需包含正确的文件。如果它每次都命名不同,你不应该在某个地方找到它的名字吗?
【解决方案2】:

您可以将 cURL 用于远程请求。以下来自php.net:

<?php
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);
?>

这里有一个很好的教程:http://www.sitepoint.com/using-curl-for-remote-requests/

考虑在此处也观看此 YouTube 视频:http://www.youtube.com/watch?v=M2HLGZJi0Hk

【讨论】:

    【解决方案3】:

    你可以试试这个:

    PHP 主文件

    <?php
    // change path/to/php according to how your system is setup
    // examples: /usr/bin/php or /opt/lampp/bin/php
    echo shell_exec("/path/to/php /path/to/php_script/script.php");
    echo "<br/>Awesome!!!"
    ?>
    

    辅助 PHP 文件

    <?php
    echo "Hello World!";
    ?>
    

    运行主 PHP 文件时的输出

    Hello World!
    Awesome!!!
    

    希望对你有帮助。

    【讨论】:

    • 也是返回空数据。我怎样才能找到错误是什么
    • 如果“你好世界!”上面没有显示,而是显示错误,因为“shell_exec”之前的“echo”。
    【解决方案4】:

    试试这个:

    <?php
    // change path/to/php according to how your system is setup
    // examples: /usr/bin/php or /opt/lampp/bin/php
    $output = shell_exec("/path/to/php /path/to/php_script/script.php");
    print_r($output);
    ?>
    

    这可能会对你有所帮助。

    【讨论】:

      【解决方案5】:

      需要强调的是,包含/执行用户生成的代码是危险的。使用系统调用(execshell_execsystem)而不是include 有助于分离执行上下文,但它并不安全。考虑适当的卫生设施或沙箱。

      考虑到这一点,下面是一个工作示例,包括生成(临时)文件、执行它和清理:

      <?php
         // test content  
         $code = <<<PHP
         echo "test";
      PHP;
      
         // create temporary file
         $d=rand();
         $myfile="$d.php";
         file_put_contents($myfile,"<?php\n$code\n?>");
      
         // start capture output
         ob_start();
      
         // include generate file
         // NOTE: user-provided code is unsafe, they could e.g. replace this file.
         include($myfile);
      
         // get capture output
         $result = ob_get_clean();
      
         // remove temporary file
         unlink($myfile);
      
         // output result
         echo "================\n" . $result . "\n================\n" ;
      

      输出:

      ================
      test
      ================
      

      【讨论】:

        【解决方案6】:
        terminal view:
        abgth@ubuntu:/var/www$ cat > test.php
        
          <?php
              echo shell_exec("php5 /var/www/check.php");     
          ?>
        
        abgth@ubuntu:/var/www$ cat > check.php
          <?php
              echo 'hi';
          ?>
        abgth@ubuntu:/var/www$ php5 test.php
        hi
        

        我希望你正在寻找这个

        【讨论】:

          【解决方案7】:

          转到终端并输入

          php 文件名.php

          filename.php 应该是你要执行的文件名!

          【讨论】:

          • 他试图让这个在运行时执行。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-13
          • 1970-01-01
          • 2016-10-19
          • 2016-07-02
          • 1970-01-01
          • 2013-02-10
          • 1970-01-01
          相关资源
          最近更新 更多