Fopen 或 File_Put_Contents 超时选项?

Posted

技术标签:

【中文标题】Fopen 或 File_Put_Contents 超时选项?【英文标题】:Fopen or File_Put_Contents Timeout option? 【发布时间】:2022-01-14 06:27:59 【问题描述】:

真的很简单,我只想在 fOpen 或 File_Put_Content 中添加一个超时 目前看来超时设置为 30 秒。

等待的时间太长了,该文件正在本地写入文件,如果无法访问或写入文件,则需要立即触发错误消息,而不是在 30 秒后。

我试过了

php.ini default_socket_timeout = 5   // Made no change

PHP 文件内部:

ini_set('default_socket_timeout',2); // Made no change 

尝试了以下代码:

                $context = stream_context_create(array('http'=> array(     'timeout' => 1.0,     'ignore_errors' => true, )));
                $fh = @file_put_contents($file, $string, false, $context);

除了写一个 If 语句并从 X 秒开始倒计时然后做一个 break 退出循环之外,我有点没有想法了。

我只想创建一个包含一些内容的文本文件,如果它无法在几秒钟内将文件写出然后继续前进(所以我可以触发错误)

 if (!is_resource($fh))  
// some error handling 

通过文档,我什么也没看到,除了这两种方法,还有其他选项可以用来设置简单的超时

【问题讨论】:

"此文件正在本地写入文件" - 你的意思是你正在写入本地文件系统?那么你想要什么 HTTP 超时,甚至不适用......? 【参考方案1】:

使用不同的设置:

set_time_limit(10);

set_time_limit 限制脚本的最大执行时间。如果达到此值,脚本将返回致命错误。默认限制为 30 秒。

【讨论】:

是的,但这适用于整个程序,我只想在 Fwrite 或 File_Put_Content 函数上使用它 @DaveHamilton 您要触发的错误是否应该停止脚本的执行?还是您打算处理它并继续执行? 处理它并继续执行,如果它出错我想顶部写入error_log并继续,因为在我的代码末尾我有一些错误处理来向用户显示通知。致命错误会停止代码的执行。

以上是关于Fopen 或 File_Put_Contents 超时选项?的主要内容,如果未能解决你的问题,请参考以下文章

详解PHP file_put_contents() 函数用法示例

PHP中file_put_contents追加和换行

PHP中file_put_contents追加和换行

PHP中file_put_contents追加和换行的实现方法

温故而知新-PHP文件操作函数

file_put_contents,无法打开流:没有这样的文件或目录 Laravel [重复]