Linux cron 不能直接编辑PHP文件,只能调用脚本触发修改;需编写独立PHP脚本用file_get_contents()和preg_replace()安全替换变量,并注意OPcache缓存、权限及并发锁问题。
Linux cron 能否直接改 PHP 文件内容
不能直接靠 cron 执行“编辑文件”这种交互操作,cron 只负责按时调用命令或脚本。真正改文件得靠 PHP 脚本自己读、改、写——cron 只是触发器。
常见错误是把 crontab -e 里写成 vim /path/to/file.php,这会卡住,因为 cron 环境没终端、没 stdin,vim 根本起不来。
- 正确做法:写一个独立的 PHP 脚本(比如
auto_update.php),用file_get_contents()+file_put_contents()或正则替换完成修改 - 确保脚本有可执行权限,且 PHP CLI 可用:
php /path/to/auto_update.php能手动跑通 - 在 crontab 中调用时,推荐写全路径:
/usr/bin/php /var/www/scripts/auto_update.php - 注意 CLI 和 Web 的 PHP 配置可能不同(比如
open_basedir、扩展启用状态),务必用php -i | grep 'Loaded Configuration'确认 CLI 加载的是哪个php.ini
PHP 脚本里怎么安全地替换文件中的变量值
硬编码 str_replace() 容易误伤(比如改 $version 却把 $version_old 也替了),推荐用正则锚定变量声明位置。
例如要更新 config.php 里的 $api_timeout = 30;:
立即学习“PHP免费学习笔记(深入)”;