public function read($remote, &$buffer)
{
$mode = $this->_findMode($remote);
if (FTP_NATIVE) {
if (@ftp_pasv($this->_conn, true) === false) {
Log::add(Text::sprintf('JLIB_CLIENT_ERROR_FTP_PASSIVE', __METHOD__), Log::WARNING, 'jerror');
return false;
}
$tmp = fopen('buffer://tmp', 'br+');
if (@ftp_fget($this->_conn, $tmp, $remote, $mode) === false) {
fclose($tmp);
Log::add(Text::sprintf('JLIB_CLIENT_ERROR_FTP_BAD_RESPONSE', __METHOD__), Log::WARNING, 'jerror');
return false;
}
rewind($tmp);
$buffer = '';
while (!feof($tmp)) {
$buffer .= fread($tmp, 8192);
}
fclose($tmp);
return true;
}
$this->_mode($mode);
if (!$this->_passive()) {
Log::add(Text::sprintf('JLIB_CLIENT_ERROR_FTP_PASSIVE', __METHOD__), Log::WARNING, 'jerror');
return false;
}
if (!$this->_putCmd('RETR ' . $remote, array(150, 125))) {
@fclose($this->_dataconn);
Log::add(Text::sprintf('JLIB_CLIENT_ERROR_FTP_NOT_EXPECTED_RESPONSE_150_125', __METHOD__, $this->_response, $remote), Log::WARNING, 'jerror');
return false;
}
$buffer = '';
while (!feof($this->_dataconn)) {
$buffer .= fread($this->_dataconn, 4096);
}
fclose($this->_dataconn);
if ($mode == FTP_ASCII) {
$os = 'UNIX';
if (IS_WIN) {
$os = 'WIN';
}
$buffer = preg_replace('/' . CRLF . '/', $this->_lineEndings[$os], $buffer);
}
if (!$this->_verifyResponse(226)) {
Log::add(Text::sprintf('JLIB_CLIENT_ERROR_FTP_TRANSFER_FAILED', __METHOD__, $this->_response, $remote), Log::WARNING, 'jerror');
return false;
}
return true;
}