<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    php實現通過ftp上傳文件

    時間:2025-04-16 06:27:31 php語言 我要投稿
    • 相關推薦

    php實現通過ftp上傳文件

      在php中我們可以利用ftp_connect相關函數實現文件上傳與下載功能,其實就是ftp客戶端一樣的操作,下面我來給大家介紹如何利用php來實現。

      大概原理

      遍歷項目中的所有非排除文件,然后獲取 文件修改時間晚于文件上一次修改時間 的文件

      然后將這些文件,通過ftp上傳到對應的目錄

      具體代碼如下:

      因為只是工具,代碼很亂,見諒

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      126

      127

      128

      129

      130

      131

      132

      133

      134

      135

      136

      137

      138

      139

      140

      141

      142

      143

      144

      145

      146

      147

      148

      149

      150

      151

      152

      153

      154

      155

      156

      157

      158

      159

      160

      161

      162

      163

      164

      165

      166

      167

      168

      169

      170

      171

      172

      173

      174

      175

      176

      177

      178

      179

      180

      181

      182

      183

      184

      185

      186

      187

      188

      189

      190

      191

      192

      193

      194

      195

      196

      197

      198

      199

      200

      201

      202

      203

      204

      205

      206

      207

      208

      209

      210

      211

      212

      213

      214

      215

      216

      217

      218

      219

      220

      221

      222

      223

      224

      225

      226

      227

      228

      229

      230

      231

      232

      233

      234

      235

      236

      237

      238

      239

      240

      241

      242

      243

      244

      245

      246

      247

      248

      249

      250

      251

      252

      253

      254

      255

      256

      257

      258

      259

      260

      261

      262

      263

      264

      265

      266

      267

      268

      269

      270

      271

      272

      273

      274

      275

      276

      277

      278

      279

      280

      281

      282

      283

      284

      285

      286

      287

      288

      289

      290

      291

      292

      293

      294

      295

      296

      297

      298

      299

      300

      301

      302

      303

      304

      305

      306

      307

      308

      309

      310

      311

      312

      313

      314

      315

      316

      317

      318

      319

      320

      321

      322

      323

      324

      325

      326

      327

      328

      329

      330

      331

      332

      333

      334

      335

      336

      337

      338

      339

      340

      341

      342

      343

      344

      345

      346

      347

      348

      349

      350

      351

      352

      353

      354

      355

      356

      357

      358

      359

      360

      361

      362

      363

      364

      365

      366

      367

      368

      369

      370

      371

      372

      373

      374

      375

      376

      377

      378

      379

      380

      381

      382

      383

      384

      385

      386

      387

      388

      389

      390

      391

      392

      393

      394

      395

      396

      397

      398

      399

      400

      401

      402

      403

      404

      405

      406

      407

      408

      409

      410

      411

      412

      413

      414

      415

      416

      417

      418

      419

      420

      421

      422

      423

      424

      425

      426

      427

      428

      429

      430

      431

      432

      433

      434

      435

      436

      437

      438

      439

      440

      441

      442

      443

      444

      445

      446

      447

      448

      449

      450

      451

      452

      453

      454

      455

      456

      457

      458

      459

      460

      461

      462

      463

      464

      465

      466

      467

      468

      469

      470

      471

      472

      473

      474

      475

      476

      477

      478

      479

      480

      481

      482

      483

      484

      485

      486

      487

      488

      489

      490

      491

      492

      493

      494

      495

      496

      497

      498

      499

      500

      501

      502

      503

      504

      <?php

      error_reporting(7);

      if ($_SERVER['SERVER_ADDR'])exit;//禁止在web服務器下運行

      $_GET['exclude'] = array('number.txt','uploads','Zend','docs','cache','You','managesdk'); //排除上傳目錄,定義為全局變量

      $fileobj = new FilerFile();

      $path = "/data/longtu/"; //項目目錄的根目錄

      $files = $fileobj->Zip($path); //過濾出最新的修改文件

      $path = str_replace("/data/longtu/","",$path);

      $config = array(

      'hostname' => 'xxx.xxx.xx.xxx', //ftp服務器 地址

      'username' => 'xxx',     //ftp用戶

      'password' => '?xxxxxxxxxxx', //ftp密碼

      'port' => 21         //端口

      );

      $ftp = new Ftp();

      $ftp->connect($config);       //鏈接服務器

      //$a=$ftp->filelist();

      $LOCAL_ROOT = realpath(dirname(__DIR__)."/../../");

      chdir($LOCAL_ROOT);

      foreach ($files as $k=>$v){

      $f = $path.$v;

      $tmp = $ftp->upload($f, $f);

      if($tmp){

      echo "upload $f -> success \n";

      }

      }

      //$ftp->download('ftp_upload.log','ftp_download.log');

      //

      //$ftp->upload('ftp_err.log','ftp_upload.log');

      //$ftp->download('ftp_upload.log','ftp_download.log');

      /*

      *

      *

      * $dir = "/test";

      if(@ftp_chdir($conn, $dir))

      判斷是否為文件夾

      * Enter description here ...

      * @author Administrator

      *

      */

      class FilerFile

      {

      var $time_path;

      private $fctimes = array();

      function Zip($dir)

      {

      $this->time_path = rtrim($dir,"/")."/.~~~time.php";

      //@unlink($this->time_path);

      $filelist = $this -> GetFileList($dir);

      file_put_contents($this->time_path,"<?php \n return ".var_export($this->fctimes,true).";");

      return $filelist;

      }

      function appendFilectime($file)

      {

      $time_file_path = $this->time_path;

      $ftime = @include($time_file_path);

      $ftime = $ftime ? $ftime : array();

      $time = filectime($file);

      if(!file_exists($time_file_path))file_put_contents($time_file_path,"<?php \n");

      }

      function getFileByFilectime($file)

      {

      static $time_data ;

      $time_file_path = $this->time_path;

      if (!$time_data){

      $time_data= @include_once($time_file_path);

      }

      $time_data = $time_data ? $time_data : array();

      //var_dump($file,$time_data[$file] == filectime($file));

      //echo $file."\t".$time_data[$file]."\n";

      if ($time_data[$file] == filemtime($file)){

      return false;

      }else{

      return $file;

      }

      }

      function GetFileList($dir,$path="")

      {

      static $tmpp = "";

      if ($path=="" && !$tmpp){

      $tmpp = $dir;

      }

      $d = dir($dir);

      $files = array();

      if ($d)

      {

      $pathP=str_replace($tmpp,"",$dir);

      $pathP=str_replace(array("\\\\","/"),DIRECTORY_SEPARATOR,$pathP);

      $pathP=str_replace(DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR,DIRECTORY_SEPARATOR,$pathP);

      while($f = $d->read())

      {

      if ($f == '.' || $f=='..' || $f{0}=='.' || $f=='Zend' || in_array($f, $_GET['exclude']))continue;

      $newdir = rtrim($dir,"/")."/".$f;

      if (is_dir($newdir)){

      $files = array_merge($files,$this->GetFileList($newdir,$newdir));

      }else{

      $abspath_file = (rtrim($dir,"/") ? rtrim($dir,"/")."/" : "").$f;

      $this->fctimes[$abspath_file] = filemtime($abspath_file);

      if (!$this->getFileByFilectime($abspath_file))continue;

      $file = (rtrim($pathP,"/") ? rtrim($pathP,"/")."/" : "").$f;

      $files[] = $file;

      }

      }

      }

      return $files;

      }

      }

      /**

      * 仿寫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;

      }

      /**

      * 文件夾是否存在

      * @param unknown_type $path

      */

      public function is_dir_exists($path)

      {

      return $this->chgdir($path);

      }

      /**

      * 目錄改變

      *

      * @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 本地目錄標識

      * @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 遠程目錄標識(ftp)

      * @param  string 本地目錄標識

      * @param  string 下載模式 auto || ascii

      * @return boolean

      */

      public function download($remotepath, $localpath, $mode = 'auto') {

      if( ! $this->_isconn()) {

      return FALSE;

      }

      if($mode == 'auto') {

      $ext = $this->_getext($remotepath);

      $mode = $this->_settype($ext);

      }

      $mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;

      $result = @ftp_get($this->conn_id, $localpath, $remotepath, $mode);

      if($result === FALSE) {

      if($this->debug === TRUE) {

      $this->_error("ftp_unable_to_download:localpath[".$localpath."]-remotepath[".$remotepath."]");

      }

      return FALSE;

      }

      return TRUE;

      }

      /**

      * 重命名/移動

      *

      * @access public

      * @param  string 遠程目錄標識(ftp)

      * @param  string 新目錄標識

      * @param  boolean 判斷是重命名(FALSE)還是移動(TRUE)

      * @return boolean

      */

      public function rename($oldname, $newname, $move = FALSE) {

      if( ! $this->_isconn()) {

      return FALSE;

      }

      $result = @ftp_rename($this->conn_id, $oldname, $newname);

      if($result === FALSE) {

      if($this->debug === TRUE) {

      $msg = ($move == FALSE) ? "ftp_unable_to_rename" : "ftp_unable_to_move";

      $this->_error($msg);

      }

      return FALSE;

      }

      return TRUE;

      }

      /**

      * 刪除文件

      *

      * @access public

      * @param  string 文件標識(ftp)

      * @return boolean

      */

      public function delete_file($file) {

      if( ! $this->_isconn()) {

      return FALSE;

      }

      $result = @ftp_delete($this->conn_id, $file);

      if($result === FALSE) {

      if($this->debug === TRUE) {

      $this->_error("ftp_unable_to_delete_file:file[".$file."]");

      }

      return FALSE;

      }

      return TRUE;

      }

      /**

      * 刪除文件夾

      *

      * @access public

      * @param  string 目錄標識(ftp)

      * @return boolean

      */

      public function delete_dir($path) {

      if( ! $this->_isconn()) {

      return FALSE;

      }

      //對目錄宏的'/'字符添加反斜杠'\'

      $path = preg_replace("/(.+?)\/*$/", "\\1/", $path);

      //獲取目錄文件列表

      $filelist = $this->filelist($path);

      if($filelist !== FALSE AND count($filelist) > 0) {

      foreach($filelist as $item) {

      //如果我們無法刪除,那么就可能是一個文件夾

      //所以我們遞歸調用delete_dir()

      if( ! @delete_file($item)) {

      $this->delete_dir($item);

      }

      }

      }

      //刪除文件夾(空文件夾)

      $result = @ftp_rmdir($this->conn_id, $path);

      if($result === FALSE) {

      if($this->debug === TRUE) {

      $this->_error("ftp_unable_to_delete_dir:dir[".$path."]");

      }

      return FALSE;

      }

      return TRUE;

      }

      /**

      * 修改文件權限

      *

      * @access public

      * @param  string 目錄標識(ftp)

      * @return boolean

      */

      public function chmod($path, $perm) {

      if( ! $this->_isconn()) {

      return FALSE;

      }

      //只有在PHP5中才定義了修改權限的函數(ftp)

      if( ! function_exists('ftp_chmod')) {

      if($this->debug === TRUE) {

      $this->_error("ftp_unable_to_chmod(function)");

      }

      return FALSE;

      }

      $result = @ftp_chmod($this->conn_id, $perm, $path);

      if($result === FALSE) {

      if($this->debug === TRUE) {

      $this->_error("ftp_unable_to_chmod:path[".$path."]-chmod[".$perm."]");

      }

      return FALSE;

      }

      return TRUE;

      }

      /**

      * 獲取目錄文件列表

      *

      * @access public

      * @param  string 目錄標識(ftp)

      * @return array

      */

      public function filelist($path = '.') {

      if( ! $this->_isconn()) {

      return FALSE;

      }

      return ftp_nlist($this->conn_id, $path);

      }

      /**

      * 關閉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';

      }

      /**

      * 錯誤日志記錄

      *

      * @access prvate

      * @return boolean

      */

      private function _error($msg) {

      return @file_put_contents('/tmp/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*/

    【php實現通過ftp上傳文件】相關文章:

    PHP實現文件上傳和多文件上傳07-31

    jQuery Mobile + PHP實現文件上傳03-20

    用PHP實現文件上傳二法05-10

    PHP實現大文件上傳源代碼05-03

    php實現文件上傳及頭像預覽功能05-25

    php使用ftp函數實現簡單上傳功能02-07

    PHP圖片文件怎么上傳實現代碼01-25

    php文件怎么上傳06-21

    php使用html5實現多文件上傳實例02-27

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人