次のコードを使用してディレクトリを作成しようとしているとします。
<code> $ ftp_server = "ftp.gitbox.net"; $ ftp_user = "your_username"; $ ftp_pass = "your_password"; $ conn_id = ftp_connect($ ftp_server);
$ login_result = ftp_login($ conn_id、$ ftp_user、$ ftp_pass);
if(ftp_mkdir($ conn_id、 "/public_html/uploads/newdir")){
エコー「カタログの作成が成功しました!」;
} それ以外 {
エコー「カタログの作成が失敗しました。 ";
}
ftp_close($ conn_id);
</code>
実行後、出力は「カタログの作成に失敗しました」。現時点では、パスの問題、接続の問題、または他の何かであるかどうかわからないと感じるかもしれません。
FTPユーザーがターゲットディレクトリに書き込み権限を持っていない最も一般的な理由。たとえば、FTPユーザーが/public_html/uploadsに制限されている場合、および上位ディレクトリにフォルダーを作成しようとすると、この操作は自然に失敗します。
FTPは、中間ディレクトリを自動的に作成しません。パスが/public_html/uploads/newDir/テストであるが、 NewDirがまだ存在しない場合、実行は失敗します。
一部のサーバーでは、有効にするにはパッシブモードが必要です。有効になっていない場合、トランスミッションチャネルの確立が成功したため、一部の操作が失敗する可能性があります。
<code> //パッシブモードFTP_PASVを有効にする($ conn_id、true); </code>ホストコントロールパネル(CPANELなど)にログインして、FTPユーザーがターゲットディレクトリに許可を書き込むかどうかを確認します。そうでない場合は、FTPアカウント設定でホームディレクトリを調整するか、より高い権限を与える必要があります。
仮想ホストを使用している場合は、アクセス許可を変更できない場合があり、現時点ではホストサービスプロバイダーに連絡する必要があります。
中級のディレクトリが存在しないための障害を回避するために、ディレクトリを段階的にループで作成できます。
<code> function ftp_mksubdirs($ ftp_stream、$ base_dir、$ target_dir){$ dir = exploit( '/'、$ target_dir); $ path = $ base_dir; foreach($ dir as $ dir){if(!$ dir)継続; $ path。= "/$ dir"; if(!@ftp_chdir($ ftp_stream、$ path)){if(!@ftp_mkdir($ ftp_stream、$ path)){return false; }}} return true; } $ ftp_server = "ftp.gitbox.net";
$ ftp_user = "your_username";
$ ftp_pass = "your_password";
$ conn_id = ftp_connect($ ftp_server);
$ login_result = ftp_login($ conn_id、$ ftp_user、$ ftp_pass);
ftp_pasv($ conn_id、true);
$ base = "/public_html";
$ target = "uploads/newdir/test";
if(ftp_mksubdirs($ conn_id、$ base、$ target)){
エコー「ディレクトリ構造は正常に作成されました。」;
} それ以外 {
エコー「カタログの作成が失敗しました。許可を確認してください。 ";
}
ftp_close($ conn_id);
</code>
このアプローチにより、必要なディレクトリ構造がリモートFTPで再帰的に作成されることが保証されます。
ディレクトリを作成する前に、ftp_chdir()を試してターゲットディレクトリを入力できます。失敗した場合、アクセス許可が不十分であるか、パスが間違っている可能性があります。
<code> if(@ftp_chdir($ conn_id、 "/public_html/uploads")){echo "ディレクトリにアクセスできます。"; } else {echo "ディレクトリアクセスに失敗した場合、許可の問題になる可能性があります。"; } </code>この手順は、ディレクトリを入力する許可があるかどうかをすばやく判断するのに役立ちます。