搜尋
首頁後端開發php教程ftp在当地能往远程服务器上传文件,但是放到服务器上就不好使了

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);
    }
}

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP中的依賴注入:避免常見的陷阱PHP中的依賴注入:避免常見的陷阱May 16, 2025 am 12:17 AM

DependencyInjection(DI)inPHPenhancescodeflexibilityandtestabilitybydecouplingdependencycreationfromusage.ToimplementDIeffectively:1)UseDIcontainersjudiciouslytoavoidover-engineering.2)Avoidconstructoroverloadbylimitingdependenciestothreeorfour.3)Adhe

如何加快PHP網站:性能調整如何加快PHP網站:性能調整May 16, 2025 am 12:12 AM

到Improveyourphpwebsite的實力,UsEthestertate:1)emplastOpCodeCachingWithOpcachetCachetOspeedUpScriptInterpretation.2)優化的atabasequesquesquesquelies berselectingOnlynlynnellynnessaryfields.3)usecachingsystemssslikeremememememcachedisemcachedtoredtoredtoredsatabaseloadch.4)

通過PHP發送大規模電子郵件:有可能嗎?通過PHP發送大規模電子郵件:有可能嗎?May 16, 2025 am 12:10 AM

是的,ItispossibletosendMassemailswithp.1)uselibrarieslikeLikePhpMailerorSwiftMailerForeffitedEmailsending.2)enasledeLaysBetenemailstoavoidSpamflagssspamflags.3))

PHP中依賴注入的目的是什麼?PHP中依賴注入的目的是什麼?May 16, 2025 am 12:10 AM

DependencyInjection(DI)inPHPisadesignpatternthatachievesInversionofControl(IoC)byallowingdependenciestobeinjectedintoclasses,enhancingmodularity,testability,andflexibility.DIdecouplesclassesfromspecificimplementations,makingcodemoremanageableandadapt

如何使用PHP發送電子郵件?如何使用PHP發送電子郵件?May 16, 2025 am 12:03 AM

使用PHP發送電子郵件的最佳方法包括:1.使用PHP的mail()函數進行基本發送;2.使用PHPMailer庫發送更複雜的HTML郵件;3.使用SendGrid等事務性郵件服務提高可靠性和分析能力。通過這些方法,可以確保郵件不僅到達收件箱,還能吸引收件人。

如何計算PHP多維數組的元素總數?如何計算PHP多維數組的元素總數?May 15, 2025 pm 09:00 PM

計算PHP多維數組的元素總數可以使用遞歸或迭代方法。 1.遞歸方法通過遍歷數組並遞歸處理嵌套數組來計數。 2.迭代方法使用棧來模擬遞歸,避免深度問題。 3.array_walk_recursive函數也能實現,但需手動計數。

PHP中do-while循環有什麼特點?PHP中do-while循環有什麼特點?May 15, 2025 pm 08:57 PM

在PHP中,do-while循環的特點是保證循環體至少執行一次,然後再根據條件決定是否繼續循環。 1)它在條件檢查之前執行循環體,適合需要確保操作至少執行一次的場景,如用戶輸入驗證和菜單系統。 2)然而,do-while循環的語法可能導致新手困惑,且可能增加不必要的性能開銷。

PHP中如何哈希字符串?PHP中如何哈希字符串?May 15, 2025 pm 08:54 PM

在PHP中高效地哈希字符串可以使用以下方法:1.使用md5函數進行快速哈希,但不適合密碼存儲。 2.使用sha256函數提高安全性。 3.使用password_hash函數處理密碼,提供最高安全性和便捷性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。