【PHP】FTPアップロード機能を作ろう。
体調元に戻ったのですが、久々にモンスターエナジー飲んだらお腹の調子が悪いZENです(汗
今回のプログラム紹介記事は、ファイルのアップロード機能になります。
また、プログラムのサンプルですが、comeonly様から、少しプログラムを変更しての紹介です。
comeonly.hatenablog.com
FTPアップロード関数
<?php /** * 指定したファイルをアップロード * $ftp ↓配列の中身 * ftp_server * ftp_user_name * ftp_user_pass * $remote_file アップロード先 * $file アップロードするファイルorディレクトリ **/ function FTPuploads($ftp, $remote_file, $file) { // 接続を確立する $conn_id = ftp_connect(trim($ftp['ftp_server'])); ftp_pasv($conn_id, true); if (!$conn_id) { die($ftp['ftp_server'].'接続できません' . "\n"); } // ユーザ名とパスワードでログインする $login_result = ftp_login($conn_id, trim($ftp['ftp_user_name']), trim($ftp['ftp_user_pass'])); if (!$login_result) { die('ログインできません'.$ftp['ftp_server']. "\n"); } // フォルダの場合作成 if( is_dir($file) ) { $contents_on_server = ftp_nlist($conn_id, $remote_file); if(!in_array($remote_file."/.", $contents_on_server)) { if(!ftp_mkdir($conn_id, $remote_file)) { echo "There was a problem while creating $file\n"; exit; } } // ファイルをアップロードする } else { if (!ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) { echo "There was a problem while uploading $file\n"; exit; } } // 接続を閉じる ftp_close($conn_id); } /** * 指定したディレクトリの一括アップロード **/ function AllFTPUpload( $ftp, $targetDir, $subPath="" ) { $aryDirs = list_targetfiles($targetDir); if( is_array($aryDirs) ) { foreach( $aryDirs as $dvals ) { $filePaths = str_replace($targetDir, "", $dvals); FTPuploads($ftp,$subPath.$filePaths,$dvals); } } } /** * 全ての階層のファイル/フォルダを取得する * $dir 指定したディレクトリの全階層取得 * **/ function list_targetfiles($dir){ $files = array(); $list = scandir($dir); $aryNotDir = array("design"); foreach($list as $file) { if($file == '.' || $file == '..') { continue; } else if(is_file($dir . $file)) { $files[] = $dir . $file; } else if(is_dir($dir . $file)) { $files[] = $dir . $file; $files = array_merge($files, list_files($dir . $file . '/')); } } return $files; } ?>
指定した、ディレクトリを一括でアップロードできるように変更してみました。
特定のファイルだけアップロードする場合は「FTPuploads」関数のみで、ディレクトリにある中身すべてをアップロードする場合は、「AllFTPUpload」を使用する形です。
アップロード完了後、元ファイルを削除したい場合、でじうぃき様のファイル削除関数を使用すると便利です。
onlineconsultant.jp