<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            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

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院