FTPの「mkdir -p」版
Warningは避けられないので、気になる人は@で抑制してください。
<?php /* Connectionは先に確立させておく */ $ftp = new FTP(); $target = '/Site/hoge/uki1/uki2/uki3/uki4/uki5'; define('WPSITE_HOST', 'localhost'); define('WPSITE_FTP_USER', 'itoh'); define('WPSITE_FTP_PASS', '*************'); $conn_id = ftp_connect(WPSITE_HOST); ftp_login($conn_id, WPSITE_FTP_USER, WPSITE_FTP_PASS); $ftp->ftp_mkdir($conn_id, $target); /* ************************ */ class Ftp { /** * @brief ftp_mkdir()の-p版 * @param connection resource * @param string ターゲットパス(絶対パス) * @retval */ function ftp_mkdir($conn_id, $target_dir) { static $path_buffer; if (is_null($path_buffer)){ $path_buffer = array(); } $target_dir = rtrim($target_dir, '/'); if (ftp_chdir($conn_id, $target_dir)){ if (count($path_buffer) > 0){ $target_dir .= '/'. array_pop($path_buffer); if (ftp_mkdir($conn_id, $target_dir)){ return $this->ftp_mkdir($conn_id, $target_dir); } else { return false; // create dir failed. } } return true; } else { $pathinfo = pathinfo($target_dir); if (!$pathinfo['basename']){ return false; } array_push($path_buffer, $pathinfo['basename']); return $this->ftp_mkdir($conn_id, $pathinfo['dirname']); } } }