如何使用shell从另一个php脚本执行php脚本?

如何使用shell从另一个php脚本执行php脚本?,php,shell,shell-exec,Php,Shell,Shell Exec,我有一个名为sample.php的php文件,包含以下内容: <?php echo "Hello World!"; ?> 我想做的是,使用第二个php脚本运行这个php脚本 我想shell\u exec可以帮助我,但我不知道它的语法 顺便说一下,我想用cpanel执行这个文件。所以我必须执行shell 有什么方法可以做到这一点吗?您可以尝试以下方法: 主PHP文件 <?php // change path/to/php according to how your syst

我有一个名为
sample.php
的php文件,包含以下内容:

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

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

我想
shell\u exec
可以帮助我,但我不知道它的语法

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

有什么方法可以做到这一点吗?

您可以尝试以下方法:

主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
echo "Hello World!";
?>
Hello World!
Awesome!!!

希望它能帮助您。

您可以使用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);
?>

这里有一个很好的教程:


请考虑在此处观看此YouTube视频:

如果需要将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<<<<
>>测试尝试以下方法:

<?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);
?>


这可能会对您有所帮助。

必须强调,包含/执行用户生成的代码是危险的。使用系统调用(
exec
shell\u exec
system
)而不是
include
)有助于分离执行上下文,但并不安全。考虑适当的卫生或沙箱。< /P> 考虑到这一点,下面是一个工作示例,包括生成(临时)文件、执行它和清理:

<?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" ;

转到终端并键入

php文件名.php

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

终端视图:
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
abgth@ubuntu:/var/www$cat>test.php abgth@ubuntu:/var/www$cat>check.php abgth@ubuntu:/var/www$php5 test.php 你好
我希望你在找这个


您更愿意在另一个进程中执行它,调用shell和所有这些,而不是简单地
include
it?您可以说
include“other_script.php”
在同一个PHP实例中运行脚本,而不是生成另一个解释器。有充分的理由需要一个独特的过程…但除非你必须这样做,
包含
通常会更好。不,我必须通过shell运行它,因为我想制作一个php在线编辑器Ori曾尝试过这个$script_output=shell_exec(“php$myfile 2>output”);但是这段代码什么也不返回。如果您必须在这里问这个问题,那么您还没有准备好编写一个在线php编辑器,并处理由此引发的所有安全问题。这也是返回空数据。如何查找错误?如果上面没有显示“Hello World!”,则会显示错误,因为“shell_exec”之前有“echo”。您好,我已经尝试了您的建议。成功了。但我从编辑器中获取数据,并使用代码$d=rand()将数据存储到文件中;$myfile=$d.“.php”;//文件内容($myfile,“代码:”,文件附加);文件内容($myfile,“\n”,文件附加);因此,您可以从我的代码中了解到,每次文件名都应该不同。我试过这个包括($myfile);但它返回一个错误,即找不到这样的文件。那么我该怎么做呢?我不确定我是否看到了问题所在。只需包含正确的文件。如果每次都有不同的名称,你不应该在某个地方对它的名称有一个句柄吗?他正试图让这个在运行时执行。
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