如何通过PHP脚本启动PHP交互式Shell?
实现加载指定文件的PHP交互式Shell
直接使用exec('php -a')无法访问当前脚本中加载的变量,因为exec启动的是独立的PHP进程,和当前脚本的内存上下文完全隔离。以下是两种可行的解决方案:
方案1:用pcntl_exec保留进程上下文(推荐)
pcntl_exec会替换当前PHP进程为新的交互式Shell进程,当前脚本中已加载的变量、类等上下文会被完整保留。
示例代码(index.php):
require 'variables.php'; // 替换当前进程为PHP交互式Shell pcntl_exec(PHP_BINARY, ['-a']);
- 注意:需要PHP安装
pcntl扩展(CLI环境通常默认包含此扩展),且脚本必须在CLI模式下运行。
方案2:通过临时文件传递上下文(无pcntl扩展时使用)
如果无法使用pcntl扩展,可以将当前脚本的上下文序列化后写入临时文件,再让新的交互式Shell自动加载该文件:
示例代码(index.php):
require 'variables.php'; // 序列化全局变量并写入临时文件 $context = serialize($GLOBALS); $tempFile = tempnam(sys_get_temp_dir(), 'php_tinker'); file_put_contents($tempFile, "<?php \$GLOBALS = unserialize('" . addslashes($context) . "'); ?>"); // 启动交互式Shell并自动加载临时文件 exec(PHP_BINARY . ' -a -d auto_prepend_file=' . escapeshellarg($tempFile)); // 清理临时文件 unlink($tempFile);
验证步骤
- 创建
variables.php文件:
$variable_on_variables_file = 'Hello from variables.php';
- 在命令行运行
php index.php,进入交互式Shell后执行echo $variable_on_variables_file;,即可输出对应变量值。
内容的提问来源于stack exchange,提问作者Bruno Gomes
相关产品推荐
相关产品推荐

