在 bash 脚本中运行 php:错误“无法打开输入文件”

Posted

技术标签:

【中文标题】在 bash 脚本中运行 php:错误“无法打开输入文件”【英文标题】:Run php in a bash script: error "Could not open input file" 【发布时间】:2016-09-22 22:01:54 【问题描述】:

我做了一个简单的脚本,比如:

#!/bin/bash
php /var/www/mysite/script1.php
php /var/www/mysite/script2.php

当我像这样以 root 身份运行它时:

bash update.sh

我收到以下错误:

Could not open input file: /var/www/mysite/script1.php
Could not open input file: /var/www/mysite/script2.php

怎么了?我尝试在我的 php 文件和所有文件夹上使用权限 777 来访问它。当我在命令行中直接执行 php /var/www/mysite/script1.php 时,它工作正常。

【问题讨论】:

尝试使用:sudo bash update.sh 看看会发生什么。 您执行 bash 脚本的方式是否与手动运行 php 命令的方式相同?如果您通过 Web 服务或其他方式运行其中一个,则路径可能会有所不同。 不会是回车结束行的问题吧?您可以执行以下操作:dos2unix update.sh > newbatchfile 并尝试新的吗? (比较文件大小,如果 newbatchfile 较小:宾果游戏) 感谢@Jean-FrançoisFabre 现在可以使用了! 【参考方案1】:

当批处理文件通过某些 Windows 兼容的编辑器或其他意外时,可能会在行尾附加回车符(就在换行之前)

所以所有的行例如这一行:

php /var/www/mysite/script1.php

包含一个不可见的 \r 字符,它被解释为参数 py php => 文件 /var/www/mysite/script1.php<invisible char> 未找到的一部分。

执行以下操作:

dos2unix update.sh > newbatchfile.sh

tr -d "\015" < update.sh > newbatchfile.sh

(比较文件大小,如果 newbatchfile 较小,问题是 CR 字符并已修复)

【讨论】:

以上是关于在 bash 脚本中运行 php:错误“无法打开输入文件”的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数从 bash 传递到 php 脚本?

用于运行 php 脚本的 Bash 脚本

使用bash脚本调用PHP方法

在 nxlog 的日志中发现错误时运行 bash 脚本

运行 bash 脚本并在错误中产生很好的结果

尝试运行第二个命令时,在 bash 脚本中运行 AWS 服务会产生错误,我做错了吗?