在php中如何使用ftp函数实现此项功能呢?以及怎么排查php使用ftp函数上传文件失败的原因?
因为系统重构实现均衡负载,网站程序与文件服务器不在一台机子上。于是,程序在上传文件的同时就要将文件上传到文件服务器上。
这里涉及到windows主机上传到linux主机,linux主机上传到linux主机。这两个之间呢,只是稍微的有点区别,因为windows的路径可以兼容linux路径,但是linux的路径不兼容windows主机'\\'的写法。所以,在写路径的时候稍加注意即可。
下面,就列举上面两种情况php中使用ftp函数上传文件的具体实现代码。
一、 ftp上传图片参数说明。$source:本机图片完整的路径。(/a/b/c.jpg)
$des:上传目标linux主机完整的路径。
$ftp_server:ftp地址
$ftp_user_name:ftp用户名
$ftp_user_pass:ftp密码
$port:端口
二、如何使用php中ftp函数上传文件的方法
例如:本地地址为:/a/b/c.jpg
目标地址为:/d/a/b/c.jpg
2.1、linux主机上传linux主机。functionftpSendFile($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
{
//此步骤是在于上传目录与本机的目录不一致转换使用
$des="/d".$des;
$conn_id=ftp_connect($ftp_server,$port)ordie("Couldn'tconnectto$ftp_server");
$login_result=ftp_login($conn_id,$ftp_user_name,$ftp_user_pass);
ftp_pasv($conn_id,TRUE);
$ftp_folder=dirname($des);
$dir=explode("/",$ftp_folder);
$path="";
for($i=0;$i
$path.="/".$dir[$i];
if(!ftp_chdir($conn_id,$path)){
$result=ftp_mkdir($conn_id,$path);
}
}
if(ftp_put($conn_id,$des,$source,FTP_BINARY)){
return1;
}else{
return0;
}
ftp_close($conn_id);
}
2.2、windows主机上传linux主机。functionsendPic($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
{
$des="/d".$des;
$conn_id=ftp_connect($ftp_server,$port)ordie("Couldn'tconnectto$ftp_server");
$login_result=ftp_login($conn_id,$ftp_user_name,$ftp_user_pass);
ftp_pasv($conn_id,TRUE);
$ftp_folder=dirname(str_ireplace('\\','/',$des));
$dir=explode("/",$ftp_folder);
$path="";
for($i=0;$i
$path.="/".$dir[$i];
if(!ftp_chdir($conn_id,$path)){
$result=ftp_mkdir($conn_id,$path);
}
}
if(ftp_put($conn_id,str_ireplace('\\','/',$des),$source,FTP_BINARY)){
return1;
}else{
return0;
}
ftp_close($conn_id);
}
上面的两种使用php中ftp函数上传文件的方法基本可以满足正常的使用。
可是,在实际的过程中可能还会遇到上传失败的问题,那么,我们该怎么解决呢?
三、如何排查php使用ftp函数上传失败的原因?
1、帐号密码端口不对,引发的上传失败?
答:这种问题属于常识,不清楚的咨询运维或者空间商等。
2、上传目录无权限,引发的上传失败?
答:将上传目录最好设置为777。
3、ftp用户上传无权限,引发的上传失败?
答:查看ftp用户是否有权限上传到指定的目录,可咨询运维或者空间商等。
4、上传路径错误,引发的上传失败?
答:仔细比对本地上传文件地址与目标上传文件地址,是否真的存在。
通过上面的四个步骤就可以基本的排查出php使用ftp函数上传失败的原因。