仿写CodeIgniter的FTP操作类
仿写CodeIgniter的FTP操作类<?PHP <br />
/**<br>
* 仿写CodeIgniter的FTP类<br>
* FTP基本操作:<br>
* 1) 登陆; connect<br>
* 2) 当前目录文件列表; filelist<br>
* 3) 目录改变; chgdir<br>
* 4) 重命名/移动; rename<br>
* 5) 创建文件夹; mkdir<br>
* 6) 删除; delete_dir/delete_file<br>
* 7) 上传; upload<br>
* 8) 下载 download<br>
*<br>
* <br>
*/<br>
class Ftp {<br>
<br>
private $hostname = '';<br>
private $username = '';<br>
private $password = '';<br>
private $port = 21;<br>
private $passive = TRUE;<br>
private $debug = TRUE;<br>
private $conn_id = FALSE;<br>
<br>
/**<br>
* 构造函数<br>
*<br>
* @param array 配置数组 : $config = array('hostname'=>'','username'=>'','password'=>'','port'=>''...);<br>
*/<br>
public function __construct($config = array()) {<br>
if(count($config) > 0) {<br>
$this->_init($config);<br>
}<br>
}<br>
<br>
/**<br>
* FTP连接<br>
*<br>
* @access public<br>
* @param array 配置数组<br>
* @return boolean<br>
*/<br>
public function connect($config = array()) {<br>
if(count($config) > 0) {<br>
$this->_init($config);<br>
}<br>
<br>
if(FALSE === ($this->conn_id = @ftp_connect($this->hostname,$this->port))) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_connect");<br>
}<br>
return FALSE;<br>
}<br>
<br>
if( ! $this->_login()) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_login");<br>
}<br>
return FALSE;<br>
}<br>
<br>
if($this->passive === TRUE) {<br>
ftp_pasv($this->conn_id, TRUE);<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
<br>
/**<br>
* 目录改变<br>
*<br>
* @access public<br>
* @param string 目录标识(ftp)<br>
* @param boolean <br>
* @return boolean<br>
*/<br>
public function chgdir($path = '', $supress_debug = FALSE) {<br>
if($path == '' OR ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
$result = @ftp_chdir($this->conn_id, $path);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE AND $supress_debug == FALSE) {<br>
$this->_error("ftp_unable_to_chgdir:dir[".$path."]");<br>
}<br>
return FALSE;<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 目录生成<br>
*<br>
* @access public<br>
* @param string 目录标识(ftp)<br>
* @param int 文件权限列表 <br>
* @return boolean<br>
*/<br>
public function mkdir($path = '', $permissions = NULL) {<br>
if($path == '' OR ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
$result = @ftp_mkdir($this->conn_id, $path);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_mkdir:dir[".$path."]");<br>
}<br>
return FALSE;<br>
}<br>
<br>
if( ! is_null($permissions)) {<br>
$this->chmod($path,(int)$permissions);<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 上传<br>
*<br>
* @access public<br>
* @param string 本地目录标识<br>
* @param string 远程目录标识(ftp)<br>
* @param string 上传模式 auto || ascii<br>
* @param int 上传后的文件权限列表 <br>
* @return boolean<br>
*/<br>
public function upload($localpath, $remotepath, $mode = 'auto', $permissions = NULL) {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
if( ! file_exists($localpath)) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_no_source_file:".$localpath);<br>
}<br>
return FALSE;<br>
}<br>
<br>
if($mode == 'auto') {<br>
$ext = $this->_getext($localpath);<br>
$mode = $this->_settype($ext);<br>
}<br>
<br>
$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;<br>
<br>
$result = @ftp_put($this->conn_id, $remotepath, $localpath, $mode);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]");<br>
}<br>
return FALSE;<br>
}<br>
<br>
if( ! is_null($permissions)) {<br>
$this->chmod($remotepath,(int)$permissions);<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 下载<br>
*<br>
* @access public<br>
* @param string 远程目录标识(ftp)<br>
* @param string 本地目录标识<br>
* @param string 下载模式 auto || ascii <br>
* @return boolean<br>
*/<br>
public function download($remotepath, $localpath, $mode = 'auto') {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
if($mode == 'auto') {<br>
$ext = $this->_getext($remotepath);<br>
$mode = $this->_settype($ext);<br>
}<br>
<br>
$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;<br>
<br>
$result = @ftp_get($this->conn_id, $localpath, $remotepath, $mode);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_download:localpath[".$localpath."]-remotepath[".$remotepath."]");<br>
}<br>
return FALSE;<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 重命名/移动<br>
*<br>
* @access public<br>
* @param string 远程目录标识(ftp)<br>
* @param string 新目录标识<br>
* @param boolean 判断是重命名(FALSE)还是移动(TRUE) <br>
* @return boolean<br>
*/<br>
public function rename($oldname, $newname, $move = FALSE) {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
$result = @ftp_rename($this->conn_id, $oldname, $newname);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$msg = ($move == FALSE) ? "ftp_unable_to_rename" : "ftp_unable_to_move";<br>
$this->_error($msg);<br>
}<br>
return FALSE;<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 删除文件<br>
*<br>
* @access public<br>
* @param string 文件标识(ftp)<br>
* @return boolean<br>
*/<br>
public function delete_file($file) {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
$result = @ftp_delete($this->conn_id, $file);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_delete_file:file[".$file."]");<br>
}<br>
return FALSE;<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 删除文件夹<br>
*<br>
* @access public<br>
* @param string 目录标识(ftp)<br>
* @return boolean<br>
*/<br>
public function delete_dir($path) {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
//对目录宏的'/'字符添加反斜杠'\'<br>
$path = preg_replace("/(.+?)\/*$/", "\\1/", $path);<br>
<br>
//获取目录文件列表<br>
$filelist = $this->filelist($path);<br>
<br>
if($filelist !== FALSE AND count($filelist) > 0) {<br>
foreach($filelist as $item) {<br>
//如果我们无法删除,那么就可能是一个文件夹<br>
//所以我们递归调用delete_dir()<br>
if( ! @delete_file($item)) {<br>
$this->delete_dir($item);<br>
}<br>
}<br>
}<br>
<br>
//删除文件夹(空文件夹)<br>
$result = @ftp_rmdir($this->conn_id, $path);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_delete_dir:dir[".$path."]");<br>
}<br>
return FALSE;<br>
}<br>
<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 修改文件权限<br>
*<br>
* @access public<br>
* @param string 目录标识(ftp)<br>
* @return boolean<br>
*/<br>
public function chmod($path, $perm) {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
//只有在PHP5中才定义了修改权限的函数(ftp)<br>
if( ! function_exists('ftp_chmod')) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_chmod(function)");<br>
}<br>
return FALSE;<br>
}<br>
<br>
$result = @ftp_chmod($this->conn_id, $perm, $path);<br>
<br>
if($result === FALSE) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_unable_to_chmod:path[".$path."]-chmod[".$perm."]");<br>
}<br>
return FALSE;<br>
}<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 获取目录文件列表<br>
*<br>
* @access public<br>
* @param string 目录标识(ftp)<br>
* @return array<br>
*/<br>
public function filelist($path = '.') {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
return ftp_nlist($this->conn_id, $path);<br>
}<br>
<br>
/**<br>
* 关闭FTP<br>
*<br>
* @access public<br>
* @return boolean<br>
*/<br>
public function close() {<br>
if( ! $this->_isconn()) {<br>
return FALSE;<br>
}<br>
<br>
return @ftp_close($this->conn_id);<br>
}<br>
<br>
/**<br>
* FTP成员变量初始化<br>
*<br>
* @access private<br>
* @param array 配置数组 <br>
* @return void<br>
*/<br>
private function _init($config = array()) {<br>
foreach($config as $key => $val) {<br>
if(isset($this->$key)) {<br>
$this->$key = $val;<br>
}<br>
}<br>
<br>
//特殊字符过滤<br>
$this->hostname = preg_replace('|.+?://|','',$this->hostname);<br>
}<br>
<br>
/**<br>
* FTP登陆<br>
*<br>
* @access private<br>
* @return boolean<br>
*/<br>
private function _login() {<br>
return @ftp_login($this->conn_id, $this->username, $this->password);<br>
}<br>
<br>
/**<br>
* 判断con_id<br>
*<br>
* @access private<br>
* @return boolean<br>
*/<br>
private function _isconn() {<br>
if( ! is_resource($this->conn_id)) {<br>
if($this->debug === TRUE) {<br>
$this->_error("ftp_no_connection");<br>
}<br>
return FALSE;<br>
}<br>
return TRUE;<br>
}<br>
<br>
/**<br>
* 从文件名中获取后缀扩展<br>
*<br>
* @access private<br>
* @param string 目录标识<br>
* @return string<br>
*/<br>
private function _getext($filename) {<br>
if(FALSE === strpos($filename, '.')) {<br>
return 'txt';<br>
}<br>
<br>
$extarr = explode('.', $filename);<br>
return end($extarr);<br>
}<br>
<br>
/**<br>
* 从后缀扩展定义FTP传输模式 ascii 或 binary<br>
*<br>
* @access private<br>
* @param string 后缀扩展<br>
* @return string<br>
*/<br>
private function _settype($ext) {<br>
$text_type = array (<br>
'txt',<br>
'text',<br>
'php',<br>
'phps',<br>
'php4',<br>
'js',<br>
'css',<br>
'htm',<br>
'html',<br>
'phtml',<br>
'shtml',<br>
'log',<br>
'xml'<br>
);<br>
<br>
return (in_array($ext, $text_type)) ? 'ascii' : 'binary';<br>
}<br>
<br>
/**<br>
* 错误日志记录<br>
*<br>
* @access prvate<br>
* @return boolean<br>
*/<br>
private function _error($msg) {<br>
return @file_put_contents('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);<br>
}<br>
}<br>
<br>
<br>
<br>
$config = array(<br>
'hostname' => '124.160.116.76',<br>
'username' => 'hangye_lsp_19@192.168.18.19',<br>
'password' => 'tb6bCnHNrO',<br>
'port' => 52816<br>
);<br>
<br>
$ftp = new Ftp();<br>
<br>
$ftp->connect($config);<br>
$ftp->upload('localfile.log','remotefile.log');<br>
?>
AD:真正免费,域名+虚机+企业邮箱=0元

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









入門コード例で Python プログラミングについて学ぶ Python は、習得が簡単でありながら強力なプログラミング言語です。初心者にとって、Python プログラミングの入門コード例を理解することは非常に重要です。この記事では、すぐに始めるのに役立つ具体的なコード例をいくつか紹介します。 Print HelloWorldprint("HelloWorld") これは、Python の最も単純なコード例です。 print()関数は、指定された内容を出力するために使用されます。

PHP 変数はプログラムの実行中に値を保存し、動的でインタラクティブな WEB アプリケーションを構築するために重要です。この記事では、PHP 変数を詳しく説明し、10 個の実際の例を使用して実際に動作する様子を示します。 1. ユーザー入力の保存 $username=$_POST["username"];$passWord=$_POST["password"]; この例では、フォーム送信からユーザー名とパスワードを抽出し、その後の処理のために変数に保存します。 2. 構成値 $database_host="localhost";$database_username="username";$database_pa を設定します。

「Go 言語プログラミングの例: Web 開発におけるコード例」 インターネットの急速な発展に伴い、Web 開発はさまざまな業界で不可欠な部分になりました。 Go 言語は、強力な機能と優れたパフォーマンスを備えたプログラミング言語として、Web 開発の開発者にますます好まれています。この記事では、読者が Go 言語をより深く理解し、Go 言語を使用して独自の Web アプリケーションを構築できるように、具体的なコード例を通じて Web 開発に Go 言語を使用する方法を紹介します。 1. シンプルな HTTP サーバー まず、

Java バブル ソートの最も簡単なコード例 バブル ソートは一般的な並べ替えアルゴリズムであり、その基本的な考え方は、並べ替える順序を、隣接する要素の比較と交換を通じて順序付けされた順序に徐々に調整することです。次に、バブル ソートの実装方法を示す簡単な Java コード例を示します。 publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

タイトル: 初心者から熟練者まで: Go 言語で一般的に使用されるデータ構造のコード実装 データ構造はプログラミングにおいて重要な役割を果たし、プログラミングの基礎です。 Go 言語には、一般的に使用されるデータ構造が多数あり、これらのデータ構造の実装をマスターすることは、優れたプログラマーになるために重要です。この記事では、Go 言語で一般的に使用されるデータ構造を紹介し、読者がこれらのデータ構造を使い始めて習熟するのに役立つ、対応するコード例を示します。 1. 配列 配列は基本的なデータ構造であり、同じ型のグループです。

PHP を使用して在庫管理システムの在庫管理機能コードを記述する方法 在庫管理は多くの企業にとって不可欠な部分です。複数の倉庫を持つ企業にとって、在庫管理機能は特に重要です。在庫を適切に管理および追跡することで、企業は異なる倉庫間で在庫を割り当て、運用コストを最適化し、コラボレーション効率を向上させることができます。この記事では、PHP を使用して在庫倉庫管理機能のコードを記述する方法を紹介し、関連するコード例を示します。 1. 在庫倉庫管理機能のコードを書き始める前に、データベースを確立します。

Java 選択ソート方法のコード記述ガイドと例 選択ソートは、シンプルで直観的なソート アルゴリズムです。そのアイデアは、ソートされていない要素から毎回最小 (または最大) の要素を選択し、すべての要素がソートされるまで交換することです。この記事では、選択項目の並べ替えのためのコード作成ガイドを提供し、特定の Java サンプル コードを添付します。アルゴリズム原理 選択ソートの基本原理は、ソート対象の配列をソート済み部分とソートされていない部分の 2 つの部分に分割し、その都度、未ソート部分から最小 (または最大) の要素が選択され、ソート済み部分の最後に配置されます。上記を繰り返します

Huawei クラウド エッジ コンピューティング相互接続ガイド: インターフェイスを迅速に実装するための Java コード サンプル IoT テクノロジーの急速な発展とエッジ コンピューティングの台頭により、ますます多くの企業がエッジ コンピューティングのアプリケーションに注目し始めています。 Huawei Cloud はエッジ コンピューティング サービスを提供し、企業に信頼性の高いコンピューティング リソースと便利な開発環境を提供し、エッジ コンピューティング アプリケーションの実装を容易にします。この記事では、Java コードを通じて Huawei Cloud エッジ コンピューティング インターフェイスを迅速に実装する方法を紹介します。まずは開発環境を準備する必要があります。 Java Development Kit がインストールされていることを確認してください (
