在Planet Hoster免费主机上用PHP exec()运行.exe文件失败求助
解决思路
核心差异:服务器操作系统
Planet Hoster免费主机默认是Linux环境,.exe是Windows专属可执行文件格式,Linux无法直接运行——这就是本地可正常执行、部署后失效的根本原因。针对性替代方案
- 若持有
MartinS.exe的源码,重新编译为Linux兼容的二进制可执行文件(使用对应语言的编译工具生成),然后将代码中的MartinS.exe替换为编译后的文件名。 - 若无源码,可尝试用Wine在Linux上模拟Windows环境运行.exe,但需确认Planet Hoster是否允许安装Wine(免费主机通常权限限制严格,建议先联系客服核实)。
- 若持有
基础权限与路径检查
- 确保Linux可执行文件拥有执行权限:通过FTP或SSH执行
chmod +x 文件名为文件添加执行权限。 - 命令中使用文件绝对路径,比如
/home/你的用户名/public_html/MartinS,避免PHP因环境变量问题找不到目标文件。
- 确保Linux可执行文件拥有执行权限:通过FTP或SSH执行
修复命令注入漏洞
直接拼接$_GET参数到命令的写法存在严重安全风险,必须用escapeshellarg()转义每个参数,示例代码:$columns = escapeshellarg($_GET['columns']); $rows = escapeshellarg($_GET['rows']); $pixelArt = escapeshellarg($pixelArt); $command = './MartinS ' . $columns . ' ' . $rows . ' ' . $pixelArt; $output = exec($command);排查执行错误细节
改用带返回码的exec调用,获取执行反馈:exec($command, $outputLines, $returnCode); // $returnCode不为0表示执行失败,$outputLines可查看输出/错误信息也可使用
shell_exec()捕获完整的命令输出,帮助定位具体问题。
内容的提问来源于stack exchange,提问作者Evilink
相关产品推荐
相关产品推荐

