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

如何通过Bash脚本调用PHP mail函数发送指定日志文件内容?

解决方法

你的问题出在两个核心点:

  1. Bash变量赋值语法错误:LOGFILE = /path里的等号前后不能有空格,正确写法是LOGFILE=/path
  2. PHP命令行的单引号会阻止Bash解析变量:单引号包裹的PHP代码里的$LOGFILE会被PHP当成自身未定义的变量,而非Bash变量。

下面是几种可行的解决方式:

方式1:让Bash读取文件内容并传递给PHP

用Bash的命令替换$(cat "$LOGFILE")读取文件内容,同时用双引号包裹PHP代码,让Bash解析其中的变量/命令:

LOGFILE="/srv/users/log/php7.4.error.log"
php -r "mail('example@example.com', 'Logs', '$(cat "$LOGFILE")', 'From:my@epicserver.xyz');"

注意:如果日志文件包含单引号、反斜杠等特殊字符,这种方式可能会破坏PHP代码的语法,需要额外转义处理。

方式2:让PHP直接读取日志文件(推荐)

跳过Bash变量传递,直接让PHP用file_get_contents读取文件,避免特殊字符问题,稳定性更高:

php -r '$logContent = file_get_contents("/srv/users/log/php7.4.error.log"); mail("example@example.com", "Logs", $logContent, "From:my@epicserver.xyz");'

方式3:通过环境变量传递文件路径给PHP

如果需要动态指定日志文件路径,可以把Bash变量设为环境变量,让PHP通过getenv获取:

LOGFILE="/srv/users/log/php7.4.error.log"
export LOGFILE
php -r '$logContent = file_get_contents(getenv("LOGFILE")); mail("example@example.com", "Logs", $logContent, "From:my@epicserver.xyz");'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:55:33