
PHP 的 exec() 等函数默认不调用 Shell 解释器(如 bash/sh),因此无法直接解析 > 重定向符号;必须显式通过 sh -c 启动 Shell 才能支持管道、重定向等 Shell 特性。
php 的 `exec()` 等函数默认不调用 shell 解释器(如 bash/sh),因此无法直接解析 `>` 重定向符号;必须显式通过 `sh -c` 启动 shell 才能支持管道、重定向等 shell 特性。
在 PHP 中调用外部命令时,exec()、system()、passthru() 和 shell_exec() 默认不经过 shell 解析器——它们直接调用 fork() + execve() 执行指定程序,绕过了 /bin/sh 对操作符(如 >, |, &&)的解释。因此,像 echo Hallo > /tmp/testtt.txt 这样的命令会被当作 单个可执行文件名 处理(系统会尝试查找名为 echo Hallo > /tmp/testtt.txt 的程序),自然失败且不会创建文件。
✅ 正确做法是显式调用 shell 并传入命令字符串:
<?php error_reporting(E_ALL);
echo "<HTML>";
// ✅ 正确:通过 sh -c 让 shell 解析重定向
exec('sh -c "echo Hallo > /tmp/testtt.txt"', $output, $retval);
echo "Rückgabe mit Status $retval und Ausgabe:<br>";
foreach ($output as $s) {
echo htmlspecialchars($s) . "<br>";
}
echo "php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











