![通过 Linux 运行 PHP 文件以包含目录时出现问题?](https://linux22.com/image/491964/%E9%80%9A%E8%BF%87%20Linux%20%E8%BF%90%E8%A1%8C%20PHP%20%E6%96%87%E4%BB%B6%E4%BB%A5%E5%8C%85%E5%90%AB%E7%9B%AE%E5%BD%95%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%9F.png)
我正在运行 Centos 5 服务器,并且想要设置一个 cronjob 在每月的 10 号运行,但我需要考虑以下问题。
我需要运行的 PHP 文件/var/www/html/test/
名为sendMails.php
如果我进入测试目录,例如,cd /var/www/html/test
输入./sendMails.php
我的脚本,它就会完美运行。
在测试目录中有一个名为 template 的文件夹,在模板文件夹中有一个名为index.htm
.的文件,正在通过 php 函数index.htm
读取。sendMails.php
file_get_contents
现在我从我的主目录运行脚本,例如,php /home/roland/sendMails.php
我收到以下错误file_get_contents(template/index.htm): failed to open stream: No such file or directory
并且不明白为什么,如果我设置了 cron,这也会失败。
任何建议都将不胜感激
答案1
您也移动了模板目录吗?
最好将文件放在某处,并将脚本设为绝对路径。例如 /path/to/your/script.php 和脚本中的 include(/path/to/your/include/dir/index.html)
答案2
正如已经说过的,最好使用绝对路径。
我想我在每个脚本中硬编码绝对路径并不好,至少如果没有真正的必要的话。这是一个强大的可移植性限制。
正确的方法是在运行时计算绝对路径使用目录名(__FILE__)检索当前脚本的目录(脚本本身,而不是脚本的包含者(如果存在))
就你的情况而言你可以
<?php
#Sendmail.php
file_get_contents(dirname(__FILE__).'/template/index.htm')
?>
这必须在任何地方都有效!
答案3
创建一个更改目录并运行 php 脚本的 shell 脚本;然后从 cronjob 调用该 shell 脚本。
答案4
您可以在 PHP 文件的顶部添加“chdir('/var/www/blabla');”。