国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP FTP 再帰ディレクトリリスト
P粉621033928
P粉621033928 2023-08-25 00:36:20
0
2
887
<p>配列內(nèi)の FTP サーバーからすべてのディレクトリとサブディレクトリを取得する再帰関數(shù)を作成しようとしています。 </p> <p>オンラインで見(jiàn)つけた多くの機(jī)能を試しました。私にとって最も効果的なのはこれです: </p> <pre class="brush:php;toolbar:false;">public function getAllSubDirFiles() { $dir = 配列("."); $a = カウント($dir); $i = 0; $深さ = 20; $b = 0; while (($a != $b) && ($i < $ Depth)) { $i; $a = カウント($dir); foreach ($dir として $d) { $ftp_dir = $d . "/"; $newdir = ftp_nlist($this->接続ID, $ftp_dir); foreach ($newdir as $key => $x) { if ((strpos($x, ".")) || (strpos($x, ".") === 0)) { unset($newdir[$key]); elseif (!in_array($x, $dir)) { $dir[] = $x; } } } $b = カウント($dir); } $dir を返します。 }</pre> <p>この関數(shù)の問(wèn)題は、ディレクトリに「.」を含めることができないことです。ルート ディレクトリにあるすべてのファイルも、その名前のディレクトリとみなされます。そこで関數(shù)を微調(diào)整して、次のようにしました。 </p> <pre class="brush:php;toolbar:false;">public function getAllSubDirFiles($ip, $id, $pw) { $dir = 配列("."); $a = カウント($dir); $i = 0; $深さ = 20; $b =0; while (($a != $b) && ($i < $ Depth)) { $i; $a = カウント($dir); foreach ($dir として $d) { $ftp_dir = $d . "/"; $newdir = ftp_nlist($this->接続ID, $ftp_dir); foreach ($newdir as $key => $x) { if (!is_dir('ftp://'.$id.':'.$pw.'@'.$ip.'/'.$x)) { unset($newdir[$key]); elseif (!in_array($x, $dir)) { $dir[] = $x; } } } $b = カウント($dir); } $dir を返します。 }</pre> <p>これは正常に動(dòng)作しますが、期待どおりの結(jié)果が得られます。しかし、遅すぎて使えません。 </p> <p><code>ftp_rawlist</code> も使用してみましたが、非常に遅いという同じ欠點(diǎn)がありました。 </p> <pre class="brush:php;toolbar:false;">public function getAllSubDirFiles() { $dir = 配列("."); $a = カウント($dir); $i = 0; $深さ = 20; $b = 0; while (($a != $b) && ($i < $ Depth)) { $i; $a = カウント($dir); foreach ($dir として $d) { $ftp_dir = $d . "/"; $newdir = $this->getFtp_rawlist('/' . $ftp_dir); foreach ($newdir as $key => $x) { $firstChar = substr($newdir[$key][0], 0, 1); $a = 8; while ($a < count($newdir[$key])) { if ($a == 8) { $fileName = $ftp_dir . '/' . $newdir[$key][$a]; } それ以外 { $fileName = $fileName . ' ' . $newdir[$key][$a]; } $a ; } if ($firstChar != 'd') { unset($newdir[$key]); elseif (!in_array($fileName, $dir)) { $dir[] = $ファイル名; } } } $b = カウント($dir); } $dir を返します。 } パブリック関數(shù) getFtp_rawlist($dir) { $newArr = 配列(); $arr = ftp_rawlist($this->connectionId, $dir); foreach ($arr as $value) { $stringArr =explode(" ", $value); $newArr[] = array_values(array_filter($stringArr)); } $newArr を返します。 }</pre> <p>ここ數(shù)日この問(wèn)題に悩まされており、ますます絶望的になってきています。誰(shuí)かが何か提案がある場(chǎng)合は、私に知らせてください</p>
P粉621033928
P粉621033928

全員に返信(2)
P粉903052556

私は、この問(wèn)題の解決に大いに役立つ OOP FTP クライアント ライブラリ を構(gòu)築しました。このコードだけを使用すると、(chmod、最終変更時(shí)刻、サイズなどの追加の有用な情報(bào)を含む) ディレクトリ リストを取得できます。 ...)。

コード:

リーリー
P粉763662390

サーバーが MLSD コマンドをサポートしており、PHP 7.2 以降を使用している場(chǎng)合は、ftp_mlsd 関數(shù) :

を使用できます。 リーリー

PHP 7.2 をお持ちでない場(chǎng)合は、MLSD コマンドを自分で実裝してみることができます。まず、ftp_rawlist コマンドのユーザー ノートを參照してください:
https://www.php.net/manual/en/function.ftp-rawlist.php#101071


MLSD を使用できない場(chǎng)合、 エントリがファイルであるかフォルダー であるかを判斷するのに特に問(wèn)題が発生します。 ftp_size トリックを使用することはできますが、エントリごとに ftp_size を呼び出すと時(shí)間がかかる可能性があります。

ただし、特定の 1 つの FTP サーバーに対してのみ作業(yè)する必要がある場(chǎng)合は、

ftp_rawlist を使用して、プラットフォーム固有の形式でファイルのリストを取得し、それを解析できます。

次のコードは、一般的な *nix 形式を想定しています。

リーリー

DOS 形式については、「

PHP を使用して FTP からディレクトリ構(gòu)造を取得する」を參照してください。

最新のダウンロード
詳細(xì)>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート