検索
ホームページバックエンド開発PHPチュートリアルPHPの徹底解説 FTPクラス_PHPチュートリアル

PHPの徹底解説 FTPクラス_PHPチュートリアル

Jul 21, 2016 pm 03:06 PM
ftpphp伝染 ; 感染プロトコルそれサポート書類方法はいモデル深く行く親切詳しい説明

FTP は、標準 (アクティブ、アクティブ モード) とパッシブ (PASV、パッシブ モード) と呼ばれる 2 つのモードをサポートするファイル転送プロトコルです。標準モードの FTP クライアントは、FTP サーバーに PORT コマンドを送信します。パッシブ モードの FTP クライアントは PASV コマンドを FTP サーバーに送信します。
以下は、これら 2 つの方法の動作原理の紹介です:

標準モード
FTP クライアントは、まず FTP サーバーの TCP 21 ポートとの接続を確立し、このチャネルを通じてコマンドを送信します。クライアントは、データを受信する必要があるときに、このチャネルで PORT コマンドを送信します。 PORT コマンドには、クライアントがデータを受信するために使用するポートが含まれています。データを送信するとき、サーバーは独自の TCP 20 ポートを介してデータを送信します。 FTP サーバーは、データを転送するためにクライアントとの新しい接続を確立する必要があります。

パッシブ モード
は、制御チャネルを確立するときの標準モードと似ており、クライアントがこのチャネルを通じて PASV コマンドを送信すると、FTP サーバーは 1024 ~ 5000 の間のランダム ポートを開き、この A リクエストをクライアントに通知します。ポート上でデータを送信すると、FTP サーバーはこのポートを介してデータを送信します。この時点で、FTP サーバーはクライアントとの新しい接続を確立する必要がなくなりました。
PHPを使用してFTPの使用を操作します

コードをコピーします コードは次のとおりです:


// FTP サーバーに接続します
$conn = ftp_connect(ftp.server.com);

// ユーザー名とパスワードを使用してログインします
ftp_login($conn, "john", "doe");

// リモート システムのタイプを取得します
ftp_systype($conn);

// ファイルをリストします
$filelist = ftp_nlist($conn, “.”); // ファイルをダウンロードします
ftp_get($conn, “data .zip", "data.zip", FTP_BINARY);

// 接続を閉じる
ftp_quit($conn);

// FTP 接続を初期化します。PHP には、ホスト名とパラメータとしてポートを指定します。上記の例では、ホスト名は「ftp.server.com」ですが、ポートが指定されていない場合、PHP は接続を確立するためにデフォルトのポートとして「21」を使用します。

//接続が成功すると、ftp_connect() はハンドル ハンドルを返します。このハンドルは、後で使用される FTP 関数によって使用されます。
$conn = ftp_connect(ftp.server.com);

// 接続が確立されたら、ftp_login() を使用してユーザー名とユーザー パスワードを送信します。関数 ftp_login() は、ftp_connect() 関数で渡されたハンドルを使用して、ユーザー名とパスワードを正しいサーバーに送信できるかどうかを判断していることがわかります。
ftp_login($conn, “john”, “doe”);

// 接続を閉じる
ftp_quit($conn);

// FTP サーバーにログインした後、PHP は、次の情報を取得できるいくつかの関数を提供します。システムとファイルとディレクトリの情報。
ftp_pwd()

//現在のディレクトリを取得します
$here = ftp_pwd($conn);

//サーバー側のシステム情報を取得します ftp_systype()
$server_os = ftp_systype($conn);モード (PASV) スイッチ、PASV をオンまたはオフにします (1 はオンを意味します)
ftp_pasv($conn, 1);

// ftp_chdir() 関数を使用してディレクトリに入り、パラメータとしてディレクトリ名を受け取ります。
ftp_chdir($conn, “public_html”);

// ftp_cdup() を使用して現在のディレクトリの親ディレクトリに戻ります
ftp_cdup($conn)

// ディレクトリを作成または移動するには、ftp_mkdir() を使用しますftp_rmdir() 関数; 注: ftp_mkdir() が正常に作成されると、新しく作成されたディレクトリ名が返されます。
ftp_mkdir($conn, “test”);

ftp_rmdir($conn, “test”);

// ftp_put() 関数は、アップロードするローカル ファイル名を指定する必要があります。 . 次のファイル名と転送の種類。例: ファイル「abc.txt」をアップロードし、アップロード後に「xyz.txt」という名前を付ける場合、コマンドは次のようになります:
ftp_put($conn, "xyz.txt", "abc.txt" , FTP_ASCII) ;

//ファイルのダウンロード: PHP によって提供される関数は ftp_get() ですが、これにはサーバー上のファイル名、ダウンロード後のファイル名、および転送タイプもパラメーターとして必要です。サイド ファイルは his.zip です。ローカル マシンにダウンロードして hers.zip という名前を付ける場合、コマンドは次のとおりです:
ftp_get($conn, “hers.zip”, “his.zip”, FTP_BINARY) ;

//PHP には 2 つの方法があります。1 つは単にファイル名とディレクトリをリストする方法、もう 1 つはファイル サイズ、権限、作成時間、その他の情報を詳細にリストする方法です。

//最初の関数は ftp_nlist() 関数を使用し、2 番目の関数は ftp_rawlist() を使用します。どちらの関数もパラメーターとしてディレクトリ名を必要とし、どちらも配列の各要素を返します。行のリスト。
$filelist = ftp_nlist($conn, “.”);

//BITES を単位として指定したファイルのサイズを返す関数 ftp_size()。 "-1" が返された場合、これはディレクトリ
$filelist = ftp_size($conn, "data.zip")

?>


FTP クラス

であることを意味することに注意してください。コードをコピーします

コードは次のとおりです:

/**
* CodeIgniter の FTP クラスを模倣します
* 基本的な FTP 操作:
* 1) ログイン; 接続
* 2) 現在のディレクトリファイルリスト; filelist
* 4) 名前変更/移動
* 5 ) フォルダーを作成します
* 6) delete_dir/delete_file
* 7) アップロードします。*/
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->ホスト名, $this->port))) {
if($this->debug === TRUE) {
$this->gt;_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;
}

/**
* ディレクトリ変更
*
* @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;
}

/**
* Upload
*
* @access public
* @param string ローカルディレクトリ識別子
* @param string リモートディレクトリ識別子 (ftp)
* @param string アップロードモード auto || アップロード後のファイル権限 リスト
* @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->gt;_getext($localpath);
$mode = $this->gt;_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 文字列リモートディレクトリ識別子 (ftp)
* @param 文字列ローカルディレクトリ識別子
* @param 文字列ダウンロードモード自動 || 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 文字列ファイル識別子 (ftp)
* @return boolean
*/
public function delete_ファイル( $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 ディレクトリ ID (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->gt; 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配列設定配列
* @return void
*/
private function _init($config = array()) {
foreach($config as $key => $val) {
if(isset($this->$key)) {
$this->gt;$key = $val;
}
}
//特殊文字过滤
$this->hostname = preg_replace ('|.+?://|','',$this->ホスト名);
}

/**
* FTP ログイン
*
* @access private
* @return boolean
*/
private function _login() {
return @ftp_login($this- >conn_id, $this->ユーザー名, $this->パスワード);
}

/**
* con_id を決定します
*
* @access private
* @return boolean
*/
プライベート関数 _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
*/
プライベート関数 _getext($filename) {
if(FALSE === strpos($filename, '.')) {
return 'txt';
}

$extarr =explode('.' , $filename);
return end($extarr);
}

/**
* サフィックス拡張子 ascii またはバイナリから FTP 転送モードを定義します
*
* @access private
* @param 文字列サフィックス拡張子
* @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('ftp_err.log', "date[".date("Y-m-d H :i:s")."]-ホスト名[".$this->ホスト名."]-ユーザー名[".$this->ユーザー名."]-パスワード[".$this->パスワード." ]-msg[".$msg."]n", FILE_APPEND);
}
}
/*ファイルの終わり ftp.php*/
/*Location /Apache Group/htdocs/ftp.php*/

デモ
复制代価代価如下:

require_once('ftp.php');
$config = array(
'hostname' => 'localhost',
'username' => 'root',
'パスワード' => 'root',
'ポート' =>
$ftp = new Ftp();
$ftp->connect($config);
$ftp->upload('ftp_err.log','ftp_upload.log');
$ftp->down​​load('ftp_upload.log','ftp_download.log');
/*ファイル ftp_demo の終わり。 php*/
/*場所: /htdocs/ftp_demo.php*/


http://www.bkjia.com/PHPjc/327631.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327631.html技術記事 FTP はファイル転送プロトコルの 1 つで、標準モード (つまりアクティブ、主動作方式) とパッシブ (PASV、被駆動方式) の 2 つのモードをサポートしています。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)