我正在编写一个简单的PHP脚本,每小时制作一些东西并写一个日志文件。
问题是cronjob没有写入日志文件,这是一个权限问题吗?这是路径问题吗?
我有siteground托管服务。脚本文件具有写入,读取和执行的权限
我已经尝试设置一个cronjob,它只是给我发送一封电子邮件而没有写一个文件然后它正在运行。
谢谢
这是我的代码:
//
//some stuffs here
//
$file='www.domainname.com/logfile.csv';
$handle = fopen ($file, "w");
fwrite($handle, "hello, i done some stuffs");
fclose($handle);
答案 0 :(得分:0)
您应该使用文件系统上文件的绝对或相对路径。
示例: -
$handle = fopen( $_SERVER['DOCUMENT_ROOT'] . '/logfile.csv' );
答案 1 :(得分:0)
通常在Web服务器目录中有可写文件是个坏主意。如果您的程序可以写入该文件,那么Web服务器也可以写入该文件。这开启了某人通过Web服务器覆盖文件的可能性。充其量你会因为过度写入而丢失数据。在最坏的情况下,它允许远程执行代码。
最好将可写文件放在Web服务器目录之外。
<Parent directory>
<Place for writable files>
<Web server directory>
在从网络服务器运行的程序中,您只需指定文件的路径。
相对路径
$relitivePath = '/../writeDir';
$handle = fopen( $_SERVER['DOCUMENT_ROOT'] . $relitivePath . '/logfile.csv' );
完整路径
$fullPath = '/somedir/ParentDir/writeDir'
$handle = fopen( $fullPath . '/logfile.csv' );
从cron运行与从shell运行它有点不同。你习惯使用的环境没有像你在sshing时那样设置。你必须列出完整的路径或设置环境。
$fullPath = '/somedir/ParentDir/writeDir'
$handle = fopen( $fullPath . '/logfile.csv' );
获取完整路径
当ssh进入时:
cd到文件所在的目录。
执行此操作将打印当前工作目录路径。
如上所述使用该路径。
在程序中,最好打开错误报告。
您也不希望在网络目录中拥有您从cron调用的程序。
我看到您的服务提供商有办法通过电子邮件发送来自cron的任何输出。这将有助于错误报告。