php cronjob不写入文件

时间:2017-09-20 15:17:37

标签: php cron

我正在编写一个简单的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);

2 个答案:

答案 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的任何输出。这将有助于错误报告。