PHP/Codeigniter FTP 超时
我正在尝试使用 Codeigniter 的 FTP 库从我的 PHP 脚本访问 FTP 服务器。这些函数工作得很好,但是在测试脚本时,我发现如果我尝试连接到不存在的服务器,脚本不会终止并显示任何类型的错误消息。
该页面继续执行,直到 Web 服务器放弃并返回一个空文档。
所以我想知道,是否有一种方法可以限制 Codeigniter 尝试连接到 FTP 服务器的时间,然后在超时时显示一条消息?
我尝试使用 php 函数 set_time_limit(),但它的行为不符合我的预期。
感谢您的帮助。
I'm trying to access an FTP server from my PHP script using Codeigniter's FTP Library. These functions work great, but when testing the script I discovered that if I attempt to connect to a server that does not exist, the script does not terminate with an error message of any kind.
The page continues to execute, until the web server gives up, returning an empty document.
So I am wondering, is there a way to limit the amount of time that Codeigniter can try to connect to an FTP server, then display a message if that times out?
I tried using the php function set_time_limit(), but it does not behave how I expected it to.
Thanks for your help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Codeigniter 的 ftp 类使用底层 ftp_connect php 调用,支持第三个可选参数,超时 (https://www.php.net/manual/en/function.ftp-connect.php)。
然而,Codeigniter 不使用它,但允许扩展它提供的默认库(前提是您愿意做一些工作并检查您对核心所做的任何更新都不会破坏扩展类的功能)。因此,为了解决您的问题,您可以在应用程序库文件夹中创建一个新库:
并从您的脚本中,您可以将超时选项添加到配置数组中:
ftp 类不会提供错误消息,除非调试参数设置为在配置数组中为 TRUE,在这种情况下,它只会显示错误。但是它也可以被覆盖,因为所有错误都会调用类中的函数 _error()。所以你可以设置 'debug' => true 在你的 $ftp_params 数组中,并在 MY_ftp 中添加一个函数,如下所示:
然后有一个函数 getError()
/**
* 该函数覆盖
*/
函数 get_error()
{
返回 $this-> 错误;
因此,
如果
返回 false,您可以调用
以获取错误并显示它。
现在,您始终可以通过进一步自定义类来自定义并拥有更复杂的错误处理机制...
希望它能回答您的问题。
Codeigniter's ftp class uses the underlying ftp_connect php call that supports a 3rd optional parameter, timeout (https://www.php.net/manual/en/function.ftp-connect.php).
Codeigniter however does not use it, but allows for extending the default libraries it provides (providing that you're willing to do some work and check that any updates you do to the core will not break the functionality of your extended class). So to solve your problem you could create a new library in you application library folder:
and from your script, you could add to your configuration array the timeout option:
The ftp class is not designed to give error messages unless the debug parameter is set to TRUE in te config array, in which case it'll just display an error. However it can also be override, because all errors call the function _error() in the class. So you could set 'debug' => true in your $ftp_params array, and add a function in MY_ftp like so:
And then have a function getError()
/**
* This function overrides
*/
function get_error()
{
return $this->error;
}
So if
returns false, you can call
to get your error and display it.
Now, you can always customize and have a more complex error handling mechanism by further customizing the class...
Hope it answers your question.
答案很简单,不要尝试连接到不存在的服务器。
The answer is simple, don't attempt to connect to a server that doesn't exist.