Класс ftp Codeigniter использует базовый php-вызов ftp_connect, который поддерживает третий необязательный параметр timeout (http://ca2.php.net/manual/en/function.ftp-connect.php).
Codeigniter, однако, не использует его, но позволяет расширять библиотеки по умолчанию, которые он предоставляет (при условии, что вы готовы выполнить некоторую работу и убедиться, что любые обновления, которые вы делаете для ядра, не нарушат функциональность вашего расширенного класса) , Таким образом, чтобы решить вашу проблему, вы можете создать новую библиотеку в папке библиотеки приложения:
<?php
class MY_FTP extends CI_FTP { //Assuming that in your config.php file, your subclass prefix is set to 'MY_' like so: $config['subclass_prefix'] = 'MY_';
var $timeout = 90;
/**
* FTP Connect
*
* @access public
* @param array the connection values
* @return bool
*/
function connect($config = array())
{
if (count($config) > 0)
{
$this->initialize($config);
}
if (FALSE === ($this->conn_id = ftp_connect($this->hostname, $this->port, $this->timeout)))
{
if ($this->debug == TRUE)
{
$this->_error('ftp_unable_to_connect');
}
return FALSE;
}
if ( ! $this->_login())
{
if ($this->debug == TRUE)
{
$this->_error('ftp_unable_to_login');
}
return FALSE;
}
// Set passive mode if needed
if ($this->passive == TRUE)
{
ftp_pasv($this->conn_id, TRUE);
}
return TRUE;
}
}
?>
и из вашего скрипта вы можете добавить в массив конфигурации параметр тайм-аута:
$this->load->library('ftp'); //if ftp is not autoloaded
$ftp_params = array('hostname'=>'1.2.3.4', 'port'=>21, 'timeout'=>10); //timout is 10 seconds instead of default 90
$ftp_conn = $this->ftp->connect($ftp_params);
if(FALSE === $ftp_conn) {
//Code to handle error
}
Класс ftp не предназначен для выдачи сообщений об ошибках, если для параметра отладки не установлено значение TRUE в массиве конфигурации, в этом случае он просто отобразит ошибку. Однако это также может быть отменено, потому что все ошибки вызывают функцию _error () в классе. Таким образом, вы можете установить 'debug' => true в вашем массиве $ ftp_params и добавить функцию в MY_ftp следующим образом:
/**
* This function overrides
*/
function _error($line)
{
$this->error = $line;
}
А потом есть функция getError ()
/ **
* Эта функция переопределяет
* /
функция get_error ()
{
вернуть $ this-> error;
}
Так что если
$ftp_conn = $this->ftp->connect($ftp_params);
возвращает false, вы можете позвонить
$error = $this->ftp->get_error();
, чтобы получить ошибку и отобразить ее.
Теперь вы всегда можете настроить и использовать более сложный механизм обработки ошибок, дополнительно настроив класс ...
Надеюсь, это ответит на ваш вопрос.