【问题标题】:PHP script saves empty image files when run as cron jobPHP脚本在作为cron作业运行时保存空图像文件
【发布时间】:2019-06-22 20:38:26
【问题描述】:

我有一个脚本,可以从外部服务器下载图像并将它们保存在网站根目录的文件夹中。该脚本文件也在网站的根目录中。

图片文件夹:/public_html/images/

脚本:/public_html/script.php

当我手动运行文件(example.com/script.php)时,所有下载的图像文件都正确保存在文件夹中。但是当文件由 cron 作业执行时,所有图像都以 0 字节的大小保存。

我尝试在 cron 作业运行之前清空文件夹。我已将权限更改为 777。脚本手动运行时的日志文件和 cron 看起来一样。

cron 作业在 cpanel crontab 中设置。

请帮我弄清楚发生了什么。

$dir = "/home/example/public_html/images/";

foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue; 
    unlink($dir.DIRECTORY_SEPARATOR.$item);
}
$ftp_server = 'www2.housescape.org.uk';
$ftp_conn = ftp_connect($ftp_server);
$ftp_user = 'user';
$ftp_pass = 'password';
ftp_set_option($ftp_conn, FTP_TIMEOUT_SEC, 3600);
if(ftp_login($ftp_conn, $ftp_user, $ftp_pass)){
            ftp_pasv($ftp_conn, true);

            $images = ftp_nlist($ftp_conn, '/images/'); 
            $c = 0;
            foreach($images as $image){
                $c = $c + 1;

                echo "ftp://user:password@www2.housescape.org.uk:21".$image." / ";  
                $urltoget="ftp://user:password@www2.housescape.org.uk:21".$image;
                echo $thefile=basename($image);
                echo "<br>"; 

                $content = file_get_contents("ftp://user:password@www2.housescape.org.uk:21".$image);
                file_put_contents("/home/example/public_html/images/".$thefile, $content);

            }
            if ($count1>0) { echo "No File Change"; }
            ftp_close($ftp_conn);
}
else{
    echo 'Failed Login!';
}   

【问题讨论】:

  • 请把script.php的内容贴出来
  • 在写入文件之前应该检查file_get_contents()是否成功。
  • 谢谢,@Barmar file_get_contents() 在手动运行时返回成功,但在 cron 作业中返回错误。

标签: php cron cpanel


【解决方案1】:

这只是帮助追查错误的建议,而不是答案:

你检查CRON PHP环境是否启用了allow_url_fopen

<?php

if (!ini_get('allow_url_fopen')) {
  die("'allow_url_fopen' is not enabled in the php.ini");
}

【讨论】:

  • 这在技术上是一个评论......不是一个答案,因为它是一个关于如何检查某事的问题和建议。
  • 不幸的是,除了我自己的声誉低于 50 之外,我无法对问题/答案发表评论。抱歉,如果这误导了您。
  • 谢谢,@Sven,'allow_url_fopen' 已禁用。我已经在 php.ini 和 user.ini 中使用allow_url_fopen = On 启用了它,但错误日志仍然显示ftp:// wrapper is disabled in the server configuration by allow_url_fopen=0 。任何想法可能是什么原因?
  • 如果PHP是通过FPM运行的,修改php.ini后需要重启FPM服务
  • @SvenMich 看起来你昨天得到了足够多的代表,现在可以发表评论了。
猜你喜欢
  • 2011-05-02
  • 2011-05-10
  • 2012-11-01
  • 2018-06-11
  • 2017-01-06
  • 1970-01-01
  • 2020-02-28
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多