如何使用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