You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用命名管道命令出现语法错误的问题求助

解决PHP中system()执行bash进程替换报错的问题

这个问题我之前也碰到过,核心原因其实很简单:PHP的system()函数默认调用的是系统的sh shell,而<()这种进程替换语法是bash专属的扩展特性,像Debian/Ubuntu默认的dash这类sh实现并不支持它,所以才会抛出Syntax error: "(" unexpected的错误。

你直接在终端执行echo <(ls)能成功,是因为当前终端默认用的是bash,自然支持这个语法,但PHP的system()函数走的是系统默认的sh路径,两者的执行环境不一样。

解决方案:显式指定用bash执行命令

只需要把要执行的命令包裹在bash -c '...'里,强制让bash来解析语法,修改后的脚本如下:

<?php system("bash -c 'echo <(ls)'");

执行php a.php后,就能正常输出/dev/fd/63了。

额外补充

  • 不光是system(),用exec()或者shell_exec()时也会碰到同样的问题,解决思路完全一致,都是指定bash作为执行shell。
  • 如果你的命令里包含其他复杂的bash特性(比如高级管道、数组操作、自定义shell函数等),都建议显式用bash -c来调用,避免sh的兼容性限制。

内容的提问来源于stack exchange,提问作者aae334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:02:38