PHP filemtime function - “stat failed for”

前端 未结 3 2008
遇见更好的自我
遇见更好的自我 2021-01-17 23:48

I have a problem with PHP filemtime function. In my webapp I use Smarty template engine with caching option. In my webapp I can do some actions which generate error, but let

相关标签:
3条回答
  • 2021-01-18 00:08

    I used filemtime successfully without checking "file_exists" for years. The way I have always interpreted the documentation is that FALSE should be returned from "filemtime" upon any error. Then a few days ago something very weird occurred. If the file did not exist, my Cron job terminated with a result. The result was not in the program output but rather in the Cron output. The message was "file length exceeded". I knew the Cron job ended on the filemtime statement because I sent myself an email before and after that statement. The "after" email never arrived.

    I inserted a file_exists check on the file to fix the Cron job. However, that should not have been necessary. I still do not know what was changed on the hosting server I use. Several other Cron jobs started failing on the same day. I do not know yet whether they have anything to do with filemtime.

    0 讨论(0)
  • 2021-01-18 00:21

    Use:

    Smarty::muteExpectedErrors();
    

    Read this and this

    0 讨论(0)
  • 2021-01-18 00:32

    file_exists internally uses the access system call which checks permissions as the real user, whereas filemtime uses stat, which performs the check as the effective user. Therefore, the problem may be rooted in the assumption of effective user == real user, which does not hold. Another explanation would be that the file gets deleted between the two calls.

    Since both the result of $_template->getCachedFilepath() and the existance of the file can change in between system calls, why do you call file_exists at all? Instead, I'd suggest just

    return @filemtime($_template->getCachedFilepath());
    

    If $_template->getCachedFilepath() can be set to a dummy value such as false, use the following:

    $path = $_template->getCachedFilepath();
    if (!$path) return false;
    return @filemtime($path);
    
    0 讨论(0)
提交回复
热议问题