php ftp上传多个文件时失败 php ftpupload批量文件FTP上传失败 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是从网上找的一个PHP FTP类 ,加了个遍历文件夹函数,单个文件上传没一点问题,如果用foreach的话连错误输出都没有,VAR_DUMP也没输出,像下面这种单个的加好多条都没问题,能传上去,$ftp->upload('smx/ewm/ewm.html','smx/ewm/ewm.html');但像这个的,就连错误输出($this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]");)都没foreach ($li['files'] as $i){ $c+=1; $r = $ftp->upload($i,$i); if($r){ echo 'ok- '.$i.'<br/>'; }else{ echo 'fail- '.$i.'<br/>'; }} <?php/** * 仿写CodeIgniter的FTP类 * FTP基本操作: * 1) 登陆; connect * 2) 当前目录文件列表; filelist * 3) 目录改变; chgdir * 4) 重命名/移动; rename * 5) 创建文件夹; mkdir * 6) 删除; delete_dir/delete_file * 7) 上传; upload * 8) 下载 download * * @author quanshuidingdang */class Ftp { private $hostname = ''; private $username = ''; private $password = ''; private $port = 21; private $passive = TRUE; private $debug = TRUE; private $conn_id = FALSE; /** * 构造函数 * * @param array 配置数组 : $config = array('hostname'=>'','username'=>'','password'=>'','port'=>''...); */ public function __construct($config = array()) { if(count($config) > 0) { $this->_init($config); } } /** * FTP连接 * * @access public * @param array 配置数组 * @return boolean */ public function connect($config = array()) { if(count($config) > 0) { $this->_init($config); } if(FALSE === ($this->conn_id = @ftp_connect($this->hostname,$this->port))) { 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; } if($this->passive === TRUE) { ftp_pasv($this->conn_id, TRUE); } return TRUE; } /** * 目录改变 * * @access public * @param string 目录标识(ftp) * @param boolean * @return boolean */ public function chgdir($path = '', $supress_debug = FALSE) { if($path == '' OR ! $this->_isconn()) { return FALSE; } $result = @ftp_chdir($this->conn_id, $path); if($result === FALSE) { if($this->debug === TRUE AND $supress_debug == FALSE) { $this->_error("ftp_unable_to_chgdir:dir[".$path."]"); } return FALSE; } return TRUE; } /** * 目录生成 * * @access public * @param string 目录标识(ftp) * @param int 文件权限列表 * @return boolean */ public function mkdir($path = '', $permissions = NULL) { if($path == '' OR ! $this->_isconn()) { return FALSE; } $result = @ftp_mkdir($this->conn_id, $path); if($result === FALSE) { if($this->debug === TRUE) { $this->_error("ftp_unable_to_mkdir:dir[".$path."]"); } return FALSE; } if( ! is_null($permissions)) { $this->chmod($path,(int)$permissions); } return TRUE; } /** * 生成批量目录,目录数组要排序 * * @access public * @param string 目录标识(ftp) * @param int 文件权限列表 * @return boolean */ public function mkpdir($path = array()) { if($path == '' OR ! $this->_isconn()) { return FALSE; } foreach ($path as $d){ $result = @ftp_mkdir($this->conn_id, $d); if($result === FALSE) { if($this->debug === TRUE) { $this->_error("ftp_unable_to_mkpdir:dir[".$path."]"); } return FALSE; } } return TRUE; } /** * 上传 * * @access public * @param string 本地目录标识 * @param string 远程目录标识(ftp) * @param string 上传模式 auto || ascii * @param int 上传后的文件权限列表 * @return boolean */ public function upload($localpath, $remotepath, $mode = 'auto', $permissions = NULL) { if( ! $this->_isconn()) { return FALSE; } if( ! file_exists($localpath)) { if($this->debug === TRUE) { $this->_error("ftp_no_source_file:".$localpath); } return FALSE; } if($mode == 'auto') { $ext = $this->_getext($localpath); $mode = $this->_settype($ext); } $mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY; $result = @ftp_put($this->conn_id, $remotepath, $localpath, $mode); if($result === FALSE) { if($this->debug === TRUE) { $this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]"); //这条错误输出都没 } return FALSE; } if( ! is_null($permissions)) { $this->chmod($remotepath,(int)$permissions); } return TRUE; } /** * 文件批量上传 * * @access public * @param string 本地目录标识 * @param string 远程目录标识(ftp) * @param string 上传模式 auto || ascii * @param int 上传后的文件权限列表 * @return boolean */ public function uppload($file) { if( ! $this->_isconn()) { return FALSE; } foreach($file as $i){ $this->upload($i,$i); } return TRUE; } /** * 关闭FTP * * @access public * @return boolean */ public function close() { if( ! $this->_isconn()) { return FALSE; } return @ftp_close($this->conn_id); } /** * FTP成员变量初始化 * * @access private * @param array 配置数组 * @return void */ private function _init($config = array()) { foreach($config as $key => $val) { if(isset($this->$key)) { $this->$key = $val; } } //特殊字符过滤 $this->hostname = preg_replace('|.+?://|','',$this->hostname); } /** * FTP登陆 * * @access private * @return boolean */ private function _login() { return @ftp_login($this->conn_id, $this->username, $this->password); } /** * 判断con_id * * @access private * @return boolean */ private function _isconn() { if( ! is_resource($this->conn_id)) { if($this->debug === TRUE) { $this->_error("ftp_no_connection"); } return FALSE; } return TRUE; } /** * 从文件名中获取后缀扩展 * * @access private * @param string 目录标识 * @return string */ private function _getext($filename) { if(FALSE === strpos($filename, '.')) { return 'txt'; } $extarr = explode('.', $filename); return end($extarr); } /** * 从后缀扩展定义FTP传输模式 ascii 或 binary * * @access private * @param string 后缀扩展 * @return string */ private function _settype($ext) { $text_type = array ( 'txt', 'text', 'php', 'phps', 'php4', 'js', 'css', 'htm', 'html', 'phtml', 'shtml', 'log', 'xml' ); return (in_array($ext, $text_type)) ? 'ascii' : 'binary'; } function listDir($dirname) { static $r = array( 'dir' => array(), 'files' => array(), ); $dir = opendir ($dirname ); while (($file = readdir ($dir )) != false ) { if ($file == "." || $file == "..") { continue; } if (is_dir ($dirname . "/" . $file )) { array_push ($r['dir'], $dirname . "/" . $file ); $this->listDir ($dirname . "/" . $file ); } else { array_push ($r['files'], $dirname . "/" . $file ); $this->upload($dirname . "/" . $file,$dirname . "/" . $file); } } return $r; } /** * 错误日志记录 * * @access prvate * @return boolean */ private function _error($msg) { if(gettype($msg) == 'array'){ return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".implode('-',$msg)."]\n", FILE_APPEND); }else{ return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n", FILE_APPEND); } }}/*End of file ftp.php*//*Location /Apache Group/htdocs/ftp.php*/ 好了,是类 多次执行,覆盖了之前的,原生FTP操作 OK 问一个大型数组作为值传递的问题。 {dede:loop}的问题 用php代码判断是不是中文系统?如何做?请帮助。 请问这种数据备份还能还原吗? 验证码不能显示,问题大概知道,不知怎么解决? 请教个mysql问题.关于获取查询结果中某一个字段的最大值..(按照其他字段排序) 如何做聊天室 如何判断函数参数是一个普通变量还是一个数组,有没有想关函数? 签到系统的php后台处理部分求解答 smarty怎么将接收到的PHP参数传递给js PHP如何采集网页指定标签里面的数据 smarty问题
VAR_DUMP也没输出,像下面这种单个的加好多条都没问题,能传上去,
$ftp->upload('smx/ewm/ewm.html','smx/ewm/ewm.html');
但像这个的,就连错误输出($this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]");)都没
foreach ($li['files'] as $i){
$c+=1;
$r = $ftp->upload($i,$i);
if($r){
echo 'ok- '.$i.'<br/>';
}else{
echo 'fail- '.$i.'<br/>';
}
}
/**
* 仿写CodeIgniter的FTP类
* FTP基本操作:
* 1) 登陆; connect
* 2) 当前目录文件列表; filelist
* 3) 目录改变; chgdir
* 4) 重命名/移动; rename
* 5) 创建文件夹; mkdir
* 6) 删除; delete_dir/delete_file
* 7) 上传; upload
* 8) 下载 download
*
* @author quanshuidingdang
*/
class Ftp { private $hostname = '';
private $username = '';
private $password = '';
private $port = 21;
private $passive = TRUE;
private $debug = TRUE;
private $conn_id = FALSE;
/**
* 构造函数
*
* @param array 配置数组 : $config = array('hostname'=>'','username'=>'','password'=>'','port'=>''...);
*/
public function __construct($config = array()) {
if(count($config) > 0) {
$this->_init($config);
}
}
/**
* FTP连接
*
* @access public
* @param array 配置数组
* @return boolean
*/
public function connect($config = array()) {
if(count($config) > 0) {
$this->_init($config);
}
if(FALSE === ($this->conn_id = @ftp_connect($this->hostname,$this->port))) {
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;
}
if($this->passive === TRUE) {
ftp_pasv($this->conn_id, TRUE);
}
return TRUE;
}
/**
* 目录改变
*
* @access public
* @param string 目录标识(ftp)
* @param boolean
* @return boolean
*/
public function chgdir($path = '', $supress_debug = FALSE) {
if($path == '' OR ! $this->_isconn()) {
return FALSE;
}
$result = @ftp_chdir($this->conn_id, $path);
if($result === FALSE) {
if($this->debug === TRUE AND $supress_debug == FALSE) {
$this->_error("ftp_unable_to_chgdir:dir[".$path."]");
}
return FALSE;
}
return TRUE;
}
/**
* 目录生成
*
* @access public
* @param string 目录标识(ftp)
* @param int 文件权限列表
* @return boolean
*/
public function mkdir($path = '', $permissions = NULL) {
if($path == '' OR ! $this->_isconn()) {
return FALSE;
}
$result = @ftp_mkdir($this->conn_id, $path);
if($result === FALSE) {
if($this->debug === TRUE) {
$this->_error("ftp_unable_to_mkdir:dir[".$path."]");
}
return FALSE;
}
if( ! is_null($permissions)) {
$this->chmod($path,(int)$permissions);
}
return TRUE;
}
/**
* 生成批量目录,目录数组要排序
*
* @access public
* @param string 目录标识(ftp)
* @param int 文件权限列表
* @return boolean
*/
public function mkpdir($path = array()) {
if($path == '' OR ! $this->_isconn()) {
return FALSE;
}
foreach ($path as $d){
$result = @ftp_mkdir($this->conn_id, $d); if($result === FALSE) {
if($this->debug === TRUE) {
$this->_error("ftp_unable_to_mkpdir:dir[".$path."]");
}
return FALSE;
}
}
return TRUE;
}
/**
* 上传
*
* @access public
* @param string 本地目录标识
* @param string 远程目录标识(ftp)
* @param string 上传模式 auto || ascii
* @param int 上传后的文件权限列表
* @return boolean
*/
public function upload($localpath, $remotepath, $mode = 'auto', $permissions = NULL) {
if( ! $this->_isconn()) {
return FALSE;
}
if( ! file_exists($localpath)) {
if($this->debug === TRUE) {
$this->_error("ftp_no_source_file:".$localpath);
}
return FALSE;
}
if($mode == 'auto') {
$ext = $this->_getext($localpath);
$mode = $this->_settype($ext);
}
$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;
$result = @ftp_put($this->conn_id, $remotepath, $localpath, $mode);
if($result === FALSE) {
if($this->debug === TRUE) {
$this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]"); //这条错误输出都没
}
return FALSE;
}
if( ! is_null($permissions)) {
$this->chmod($remotepath,(int)$permissions);
}
return TRUE;
}
/**
* 文件批量上传
*
* @access public
* @param string 本地目录标识
* @param string 远程目录标识(ftp)
* @param string 上传模式 auto || ascii
* @param int 上传后的文件权限列表
* @return boolean
*/
public function uppload($file) {
if( ! $this->_isconn()) {
return FALSE;
}
foreach($file as $i){
$this->upload($i,$i);
}
return TRUE;
}
/**
* 关闭FTP
*
* @access public
* @return boolean
*/
public function close() {
if( ! $this->_isconn()) {
return FALSE;
}
return @ftp_close($this->conn_id);
}
/**
* FTP成员变量初始化
*
* @access private
* @param array 配置数组
* @return void
*/
private function _init($config = array()) {
foreach($config as $key => $val) {
if(isset($this->$key)) {
$this->$key = $val;
}
} //特殊字符过滤
$this->hostname = preg_replace('|.+?://|','',$this->hostname);
}
/**
* FTP登陆
*
* @access private
* @return boolean
*/
private function _login() {
return @ftp_login($this->conn_id, $this->username, $this->password);
}
/**
* 判断con_id
*
* @access private
* @return boolean
*/
private function _isconn() {
if( ! is_resource($this->conn_id)) {
if($this->debug === TRUE) {
$this->_error("ftp_no_connection");
}
return FALSE;
}
return TRUE;
}
/**
* 从文件名中获取后缀扩展
*
* @access private
* @param string 目录标识
* @return string
*/
private function _getext($filename) {
if(FALSE === strpos($filename, '.')) {
return 'txt';
}
$extarr = explode('.', $filename);
return end($extarr);
}
/**
* 从后缀扩展定义FTP传输模式 ascii 或 binary
*
* @access private
* @param string 后缀扩展
* @return string
*/
private function _settype($ext) {
$text_type = array (
'txt',
'text',
'php',
'phps',
'php4',
'js',
'css',
'htm',
'html',
'phtml',
'shtml',
'log',
'xml'
);
return (in_array($ext, $text_type)) ? 'ascii' : 'binary';
}
function listDir($dirname) {
static $r = array(
'dir' => array(),
'files' => array(),
); $dir = opendir ($dirname );
while (($file = readdir ($dir )) != false ) {
if ($file == "." || $file == "..") {
continue;
}
if (is_dir ($dirname . "/" . $file )) {
array_push ($r['dir'], $dirname . "/" . $file );
$this->listDir ($dirname . "/" . $file );
} else {
array_push ($r['files'], $dirname . "/" . $file );
$this->upload($dirname . "/" . $file,$dirname . "/" . $file);
}
}
return $r;
}
/**
* 错误日志记录
*
* @access prvate
* @return boolean
*/
private function _error($msg) {
if(gettype($msg) == 'array'){
return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".implode('-',$msg)."]\n", FILE_APPEND);
}else{
return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n", FILE_APPEND);
}
}
}/*End of file ftp.php*/
/*Location /Apache Group/htdocs/ftp.php*/