|
CI的FTP类定义是:CodeIgniter's FTP Class permits files to be transfered to a remote server. Remote files can also be moved, renamed, and deleted. The FTP class also includes a "mirroring" function that permits an entire local directory to be recreated remotely via FTP.
如果按这个定义,那么“permits files to be transfered to a remote server”应该可以理解成在任一计算机上上传任意本地文件到FTP服务器的指定目录下。但经过实际动手,却发现CI的FTP类根本不是这么个意思。这个类只能使用于服务器,既CI的APP运行的机器上。这与通常意义上的设计需求有着本质的区别。因为,执行FTP操作的目的是在任一客户端将文件上传服务器指定目录下,而绝非在服务器上操作。换句话说,如果都能操作服务器了,还用FTP干么呢?直接拷贝一下就欧克了。因此,建议CI的这个FTP类,应该进行整改。
由于PHP本身最大执行30秒的限制,通过表单上传大文件是个比较可怕的噩梦,而且各服务器提供商对最大上传限制和最大表单数据肯定有限制。因此,使用FTP上传体格比较大的文件是不二的选择。
因为CI的FTP类不好用,自己重新写了一个FTP操作应用,很简单,现在贴出来,希望能对大家有帮助。
PHP复制代码 function ftp ()
{
if(empty($this->webinfo->ftpserver) || empty($this->webinfo->ftpuser) || empty($this->webinfo->ftppwd))
{
show_error ('您并未设定FTP服务器域名、IP地址、用户名及密码等信息');
}
$ftpid = $this->uri->segment(4,0);
$updateid = $this->input->post('updateid');
$workDir = "C:\\temp_upload\\";
$tmpName = basename($_FILES['file']['tmp_name']);
move_uploaded_file($_FILES['file']['tmp_name'], $workDir.$tmpName) or die("移动上传文件到临时目录失败,请检查临时目录是否存在,是否有写权限!");
$conn = ftp_connect($this->webinfo->ftpserver) or die ("连接FTP服务器失败,请检查设定的FTP服务器域名或IP地址");
ftp_login($conn, $this->webinfo->ftpuser, $this->webinfo->ftppwd) or die("登录FTP服务器失败,请检查设定的用户名及密码");
$destDir = '/uploads/media/';
$upload = ftp_put($conn, $destDir.$_FILES['file']['name'], $workDir.$tmpName, FTP_BINARY );
if($upload)
{
header ( 'Content-Type: text/html; charset=utf-8' );
print "<script>window.alert('上传成功,请录入该相册的其他属性!');</script>";
}
else
{
show_error ('FTP上传相册出现异常,请返回重新操作,或向开发者报告bug。spt119@163.com');
}
ftp_close($conn);
unlink($workDir."/".$tmpName) or die("删除 temp_upload 目录下临时文件失败,请管理员手动删除该文件");
$this->load->view('admin/admingallaryadd');
$this->load->view('admin/admin_foot');
} 复制代码 |
评分
-
查看全部评分
|