ftp在当地能往远程服务器上传文件,但是放到服务器上就不好使了
程序员文章站
2022-06-04 17:31:25
...
ftp在本地能往远程服务器上传文件,但是放到服务器上就不好使了
网站购买的万网的虚拟主机,无法修改php.ini,也没有办法是用.htaccess来修改上传文件大小,故上传大于10M的文件只好使用ftp方式,代码如下:
$ftp_server= "xxxx.xxxx.com";
$ftp_user_name= "xxxx";
$ftp_user_pass= "xxxxx";
$local_file = "D:/Lyb_0/zmsgx.mp4"; //本地文件
$server_file = "htdocs/videos/zmsgx.mp4"; //待上传后文件所在路径
$conn_id = ftp_connect($ftp_server); //联接FTP
$login_result = ftp_login($conn_id,$ftp_user_name,$ftp_user_pass) or die("Login error"); //登录
$fp=fopen($local_file,"r");
ftp_pasv($conn_id, true); //开启被动模式传输
//上传参数
if(ftp_fput($conn_id,$server_file,$fp,FTP_BINARY)) {
echo "Successfully uploaded $server_file\n";
}else{
echo "There was a problem while uploading $file\n";
}
//关闭连接
ftp_close($conn_id);
fclose($fp);
但是这段代码只在本地好使,放到服务器上就好使了,fopen($local_file,"r");无法打开本地文件。请问如何解决?
------解决思路----------------------
你先确认 fopen 是否可用
在服务器上所谓“本地文件”是指服务器上的文件
所以你使用 ftp 绕过 upload 限制的做法,是不现实的
------解决思路----------------------
$local_file
这个无法取到本地文件吧。
------解决思路----------------------
class Ftp{
public $ftpconn;
public static $_instance = array();
private function __construct($host,$username,$password) {
$this->ftpconn = ftp_connect($host);
$this->login($username, $password);
}
public function login($username, $password){
ftp_login($this->ftpconn, $username, $password);
}
public static function getInstance($host,$username,$password){
$key = md5($host.'-'.$username.'-'.$password);
if(!isset(self::$_instance[$key])
------解决思路----------------------
!(self::$_instance[$key] instanceof self)){
self::$_instance[$key] = new self($host, $username, $password);
}
return self::$_instance[$key];
}
public function __clone(){
trigger_error('该类禁止克隆',E_USER_ERROR);
}
public function __destruct() {
ftp_close($this->ftpconn);
}
public function nlist($dir){
$filelist = ftp_nlist($this->ftpconn, $dir);
return $filelist;
}
//切换当前目录的父目录
public function cdup(){
return ftp_cdup($this->ftpconn);
}
//在 FTP 服务器上改变当前目录
public function chdir($dir){
return @ftp_chdir($this->ftpconn, $dir);
}
//修改文件权限
public function chmod ($dir,$mode){
return ftp_chmod($this->ftpconn, $mode, $dir);
}
//删除文件
public function delete($filename){
return ftp_delete($this->ftpconn, $filename);
}
//请求运行一条 FTP 命令(true,false)
public function exec($command){
return ftp_exec($this->ftpconn,$command);
}
//从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中
//mode传输模式只能为 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 其中的一个。
public function fget ($handle,$remote_file,$mode,$resumepos = 0){
return ftp_fget($this->ftpconn,$handle,$remote_file,$mode,$resumepos);
}
//上传一个已经打开的文件到 FTP 服务器
//mode传输模式只能为 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 其中的一个。
public function fput ($remote_file,$handle,$mode,$resumepos = 0 ){
return ftp_fput($this->ftpconn,$remote_file,$handle,$mode,$resumepos);
}
//返回当前 FTP 连接的各种不同的选项设置
public function get_option($option=FTP_TIMEOUT_SEC){
return ftp_get_option($this->ftpconn,$option);
}
//从 FTP 服务器上下载一个文件
public function get($local_file,$remote_file ,$mode,$resumepos=0){
return ftp_get($this->ftpconn,$local_file,$remote_file ,$mode,$resumepos);
}
//返回指定文件的最后修改时间
public function mdtm ($remote_file){
return ftp_mdtm ($this->ftpconn,$remote_file);
}
//建立新目录
public function mkdir($dir,$directory){
$this->chdir($dir);
return @ftp_mkdir($this->ftpconn,$directory);
}
//连续获取/发送文件(non-blocking)
public function nb_continue(){
return ftp_nb_continue($this->ftpconn);
}
//Retrieves a file from the FTP server and writes it to an open file (non-blocking)
public function nb_fget ($handle,$remote_file,$mode,$resumepos = 0){
return ftp_nb_fget ($this->ftpconn,$handle,$remote_file,$mode,$resumepos);
}
//Stores a file from an open file to the FTP server (non-blocking)
public function nb_fput ($remote_file,$handle,$mode,$resumepos = 0 ){
return ftp_nb_fput ($this->ftpconn,$remote_file,$handle,$mode,$resumepos);
}
//从 FTP 服务器上获取文件并写入本地文件(non-blocking)
public function nb_get ($local_file,$remote_file ,$mode,$resumepos=0){
return ftp_nb_get ($this->ftpconn,$local_file,$remote_file ,$mode,$resumepos);
}
//存储一个文件至 FTP 服务器(non-blocking)
public function nb_put ($remote_file ,$local_file,$mode,$resumepos=0){
return ftp_nb_put ($this->ftpconn,$remote_file ,$local_file,$mode,$resumepos);
}
//返回当前 FTP 被动模式是否打开
public function pasv($pasv){
return ftp_pasv($this->ftpconn,$pasv);
}
//上传文件到 FTP 服务器
public function put ($remote_file ,$local_file,$mode,$resumepos=0){
return ftp_put ($this->ftpconn,$remote_file ,$local_file,$mode,$resumepos);
}
//返回当前目录名
public function pwd (){
return ftp_pwd ($this->ftpconn);
}
//Sends an arbitrary command to an FTP server
public function raw ($command){
return ftp_raw ($this->ftpconn,$command);
}
//返回指定目录下文件的详细列表
public function rawlist($directory){
return ftp_rawlist($this->ftpconn,$directory);
}
//更改 FTP 服务器上的文件或目录名
public function rename($oldname ,$newname){
return ftp_rename($this->ftpconn,$oldname , $newname);
}
//删除 FTP 服务器上的一个目录
public function rmdir($directory){
return ftp_rmdir($this->ftpconn,$directory);
}
//设置各种 FTP 运行时选项
public function set_option ($option,$value){
return ftp_set_option ($this->ftpconn,$option,$value);
}
//向服务器发送 SITE 命令
public function site ($cmd){
return ftp_site ($this->ftpconn,$cmd);
}
//返回指定文件的大小
public function size ($remote_file){
return ftp_size ($this->ftpconn,$remote_file);
}
//Opens an Secure SSL-FTP connection
public function ssl_connect($host){
$this->ftpconn = ftp_ssl_connect($host);
}
//返回远程 FTP 服务器的操作系统类型
public function systype (){
return ftp_systype ($this->ftpconn);
}
}
网站购买的万网的虚拟主机,无法修改php.ini,也没有办法是用.htaccess来修改上传文件大小,故上传大于10M的文件只好使用ftp方式,代码如下:
$ftp_server= "xxxx.xxxx.com";
$ftp_user_name= "xxxx";
$ftp_user_pass= "xxxxx";
$local_file = "D:/Lyb_0/zmsgx.mp4"; //本地文件
$server_file = "htdocs/videos/zmsgx.mp4"; //待上传后文件所在路径
$conn_id = ftp_connect($ftp_server); //联接FTP
$login_result = ftp_login($conn_id,$ftp_user_name,$ftp_user_pass) or die("Login error"); //登录
$fp=fopen($local_file,"r");
ftp_pasv($conn_id, true); //开启被动模式传输
//上传参数
if(ftp_fput($conn_id,$server_file,$fp,FTP_BINARY)) {
echo "Successfully uploaded $server_file\n";
}else{
echo "There was a problem while uploading $file\n";
}
//关闭连接
ftp_close($conn_id);
fclose($fp);
但是这段代码只在本地好使,放到服务器上就好使了,fopen($local_file,"r");无法打开本地文件。请问如何解决?
------解决思路----------------------
你先确认 fopen 是否可用
在服务器上所谓“本地文件”是指服务器上的文件
所以你使用 ftp 绕过 upload 限制的做法,是不现实的
------解决思路----------------------
$local_file
这个无法取到本地文件吧。
------解决思路----------------------
class Ftp{
public $ftpconn;
public static $_instance = array();
private function __construct($host,$username,$password) {
$this->ftpconn = ftp_connect($host);
$this->login($username, $password);
}
public function login($username, $password){
ftp_login($this->ftpconn, $username, $password);
}
public static function getInstance($host,$username,$password){
$key = md5($host.'-'.$username.'-'.$password);
if(!isset(self::$_instance[$key])
------解决思路----------------------
!(self::$_instance[$key] instanceof self)){
self::$_instance[$key] = new self($host, $username, $password);
}
return self::$_instance[$key];
}
public function __clone(){
trigger_error('该类禁止克隆',E_USER_ERROR);
}
public function __destruct() {
ftp_close($this->ftpconn);
}
public function nlist($dir){
$filelist = ftp_nlist($this->ftpconn, $dir);
return $filelist;
}
//切换当前目录的父目录
public function cdup(){
return ftp_cdup($this->ftpconn);
}
//在 FTP 服务器上改变当前目录
public function chdir($dir){
return @ftp_chdir($this->ftpconn, $dir);
}
//修改文件权限
public function chmod ($dir,$mode){
return ftp_chmod($this->ftpconn, $mode, $dir);
}
//删除文件
public function delete($filename){
return ftp_delete($this->ftpconn, $filename);
}
//请求运行一条 FTP 命令(true,false)
public function exec($command){
return ftp_exec($this->ftpconn,$command);
}
//从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中
//mode传输模式只能为 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 其中的一个。
public function fget ($handle,$remote_file,$mode,$resumepos = 0){
return ftp_fget($this->ftpconn,$handle,$remote_file,$mode,$resumepos);
}
//上传一个已经打开的文件到 FTP 服务器
//mode传输模式只能为 (文本模式) FTP_ASCII 或 (二进制模式) FTP_BINARY 其中的一个。
public function fput ($remote_file,$handle,$mode,$resumepos = 0 ){
return ftp_fput($this->ftpconn,$remote_file,$handle,$mode,$resumepos);
}
//返回当前 FTP 连接的各种不同的选项设置
public function get_option($option=FTP_TIMEOUT_SEC){
return ftp_get_option($this->ftpconn,$option);
}
//从 FTP 服务器上下载一个文件
public function get($local_file,$remote_file ,$mode,$resumepos=0){
return ftp_get($this->ftpconn,$local_file,$remote_file ,$mode,$resumepos);
}
//返回指定文件的最后修改时间
public function mdtm ($remote_file){
return ftp_mdtm ($this->ftpconn,$remote_file);
}
//建立新目录
public function mkdir($dir,$directory){
$this->chdir($dir);
return @ftp_mkdir($this->ftpconn,$directory);
}
//连续获取/发送文件(non-blocking)
public function nb_continue(){
return ftp_nb_continue($this->ftpconn);
}
//Retrieves a file from the FTP server and writes it to an open file (non-blocking)
public function nb_fget ($handle,$remote_file,$mode,$resumepos = 0){
return ftp_nb_fget ($this->ftpconn,$handle,$remote_file,$mode,$resumepos);
}
//Stores a file from an open file to the FTP server (non-blocking)
public function nb_fput ($remote_file,$handle,$mode,$resumepos = 0 ){
return ftp_nb_fput ($this->ftpconn,$remote_file,$handle,$mode,$resumepos);
}
//从 FTP 服务器上获取文件并写入本地文件(non-blocking)
public function nb_get ($local_file,$remote_file ,$mode,$resumepos=0){
return ftp_nb_get ($this->ftpconn,$local_file,$remote_file ,$mode,$resumepos);
}
//存储一个文件至 FTP 服务器(non-blocking)
public function nb_put ($remote_file ,$local_file,$mode,$resumepos=0){
return ftp_nb_put ($this->ftpconn,$remote_file ,$local_file,$mode,$resumepos);
}
//返回当前 FTP 被动模式是否打开
public function pasv($pasv){
return ftp_pasv($this->ftpconn,$pasv);
}
//上传文件到 FTP 服务器
public function put ($remote_file ,$local_file,$mode,$resumepos=0){
return ftp_put ($this->ftpconn,$remote_file ,$local_file,$mode,$resumepos);
}
//返回当前目录名
public function pwd (){
return ftp_pwd ($this->ftpconn);
}
//Sends an arbitrary command to an FTP server
public function raw ($command){
return ftp_raw ($this->ftpconn,$command);
}
//返回指定目录下文件的详细列表
public function rawlist($directory){
return ftp_rawlist($this->ftpconn,$directory);
}
//更改 FTP 服务器上的文件或目录名
public function rename($oldname ,$newname){
return ftp_rename($this->ftpconn,$oldname , $newname);
}
//删除 FTP 服务器上的一个目录
public function rmdir($directory){
return ftp_rmdir($this->ftpconn,$directory);
}
//设置各种 FTP 运行时选项
public function set_option ($option,$value){
return ftp_set_option ($this->ftpconn,$option,$value);
}
//向服务器发送 SITE 命令
public function site ($cmd){
return ftp_site ($this->ftpconn,$cmd);
}
//返回指定文件的大小
public function size ($remote_file){
return ftp_size ($this->ftpconn,$remote_file);
}
//Opens an Secure SSL-FTP connection
public function ssl_connect($host){
$this->ftpconn = ftp_ssl_connect($host);
}
//返回远程 FTP 服务器的操作系统类型
public function systype (){
return ftp_systype ($this->ftpconn);
}
}
相关文章
相关视频
上一篇: 做什么样的网站好勒?关键是可以躲懒的网站
下一篇: RedHat上安装MySQLdb