スポンサードリンク

CakePHPでフォルダを作ろうとしたんですが
PHP関数のmkdirで作れなかったんです。
どうも、mkdir, mv, ls, cp, rmは非推奨になったようで
代わりにFolder APIとFile APIというものを使った方がいいようです。
スポンサードリンク
APIを使うためにクラスをロードします
コントローラーに記述
App::uses('Folder', 'Utility'); App::uses('File', 'Utility');
これでFolder APIとFile APIが使えるようになります。
使ったものはFolder APIでフォルダの作成と削除、移動と
File APIでファイルの削除です。
Folder APIでフォルダの作成と削除、移動
フォルダの作成
$dir = new Folder(); //インスタンスの作成
$dir->create('作成したいフォルダのパス');
$dir = new Folder(); //インスタンスの作成 $dir->create('作成したいフォルダのパス');
※作成したいフォルダのパスは作成したいフォルダ名を含みます。
フォルダの移動
$dir = new Folder('移動させたいフォルダのパス'); //インスタンスの作成 $dir->create('移動先のフォルダのパス');
フォルダの削除
$dir = new Folder('削除させたいフォルダのパス'); //インスタンスの作成 $dir->delete();
スポンサードリンク
File APIでファイルの削除
ファイルの削除
$file = new File('削除したいファイルのパス'); //インスタンスの作成 $file->delete();
あまり機能としては使っていないですが
簡単にフォルダやファイルの操作ができます。
他にも色々メソッドがあるので
必要になったら使ってみます。
スポンサードリンク
現在、cakePHPを勉強中で、当サイト、大変参考にさせて頂いております。
1点、今、私が実現したい内容に近かったので、コメントさせて頂きます。
私が、行いたい操作は以下になります。
——————————————-
①input fileで画像アップロード(test_dataフォルダへ)
↓
②確認ページでOKをクリック
↓
③★(test_dataフォルダ)→(dataフォルダ)へコピー
★部分で、fileAPIを使用したく、コントローラに記述しているのですが、
どうも、記述にあやまりがあるらしく、コピーされません。
ご質問
——————————————-
1.
App::uses(‘Folder’, ‘Utility’);
App::uses(‘File’, ‘Utility’);
は、コントローラファイルのclass前の記述(ファイル先頭)で問題ないでしょうか?
2.
②でクリックされた際に、読まれるコントローラアクション内に、以下の記述で問題ないでしょうか?
$file = new File(WWW_ROOT.’path/test_copy.txt’);
$file->copy(WWW_ROOT.’path/test_copy_dest.txt’,true);
3.
上記のソース内で、画像をコピーする指定をしたいのですが、以下では間違いでしょうか?
$file = new File(‘./img/test_data/shop01_basic_big.jpg’);
$file->copy(‘./img/data/shop01_basic_big.jpg’,true);
長々、大変失礼なのですが、
何卒、ご教授の程、お願い致します。
>松浦さんへ
コメントありがとうございます。
少しでもお役に立ててうれしい限りです。
ご質問にお答え致しますね。
>1.
>App::uses(‘Folder’, ‘Utility’);
>App::uses(‘File’, ‘Utility’);
>は、コントローラファイルのclass前の記述(ファイル先頭)で問題ないでしょうか?
→こちらは、class前でなくても普通問題ないです。
確か、Folder APIとFile APIはclassの前で読み込んだ場合
うまく動かなかった気がします。
すみません、うる覚えですが・・・
僕はフォルダやファイルの操作を行うコントローラーのアクション内で読み込んでいます。
>2.
>②でクリックされた際に、読まれるコントローラアクション内に、以下の記述で問題ないでしょうか?
>$file = new File(WWW_ROOT.’path/test_copy.txt’);
>$file->copy(WWW_ROOT.’path/test_copy_dest.txt’,true);
→②の動作で「path」フォルダ内のtest_copyファイルを
test_copy_destという名前でコピーするというなら問題ないです。
>3.
>上記のソース内で、画像をコピーする指定をしたいのですが、以下では間違いでしょうか?
>$file = new File(‘./img/test_data/shop01_basic_big.jpg’);
>$file->copy(‘./img/data/shop01_basic_big.jpg’,true);
→ファイルパスの記述が違うと思います。
CakePHPはサーバー内の絶対パスを使うのが基本なので
パスの書き方を変えてもらうといいです。
とりあえず、これでやってみて下さい。
それでもできない場合は、
またコメント入れて頂ければと思います。