###前提・実現したいこと
ここに質問したいことを詳細に書いてください
年度・月別フォルダを作成してそのフォルダーにファイルを作成する。
###発生している問題・エラーメッセージ
年/月/ここにファイルを作成したい
が、現在のフォルダーに作成されてしまう。
エラーメッセージ
###該当のソースコード
ーーーx.phpーーー <?php $y = date('Y'); $m = date('m'); $dirname = './' . $y . '/' . $m . '/'; if (!is_dir($dirname)) { if (!mkdir($dirname, 0777, true)) { //mkdirがfalseを返したら何か問題があったとみなして、エラー時の処理を行う } } $filename = date("YmdHis").$_FILES['userfile']['name'] . ".html"; // ※5 ファイル生成&書き込み if ( ($handle = fopen( $dirname . $filename, 'w')) == FALSE) { return false; } } ?>
###試したこと
fopen( $dirname . $filename, 'w'))
にしたが変わらなかった
###補足情報(言語/FW/ツール等のバージョンなど)
省いているところが多々ありますがここが原因であろうという場所を抜き出しています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
php
1$dirname = '/' . $y . '/' . $m . '/';
のように設定しているので、OSはLinux または mac ということになりますかね。書いていないのでなんとも言えませんが…
linux で / から始まるパスは、ルートですので、おそらく、ファイルおよびディレクトリが作成される場所、確認している場所に違いがあるのではないでしょうか?
php
1$dirname = $y . DIRECTORY_SEPARATOR . $m . DIRECTORY_SEPARATOR;
と設定してみてはいかがですか?
php
1// そもそも 16/08 というディレクトリが存在していないので 2// file_exists の方が直感的 3if (!is_dir($dirname)) { 4 if (!mkdir($dirname, 0777, true)) { 5 //mkdirがfalseを返したら何か問題があったとみなして、エラー時の処理を行う 6 } 7}
↓
php
1if (!file_exists($dirname)) { 2 // 16/08 の上のディレクトリに権限がない 3 if (!mkdir($dirname, 0777, true)) { // ここで Warning 発生している 4 //mkdirがfalseを返したら何か問題があったとみなして、エラー時の処理を行う 5 } 6}
投稿2016/08/26 17:45
編集2016/08/27 13:47退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/27 02:49
退会済みユーザー
2016/08/27 04:15
2016/08/27 12:26
退会済みユーザー
2016/08/27 12:30 編集
2016/08/27 13:25
退会済みユーザー
2016/08/27 13:37 編集
退会済みユーザー
2016/08/27 13:39
0
先頭に.を付けて同じにしてみてはどうでしょうか?
php
1$dirname = './' . $y . '/' . $m . '/'; 2..... 3fopen( "./" . $y . "/" . $m . "/" . $filename, 'w')) 4
投稿2016/08/27 00:39
総合スコア4070
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/27 02:29
2016/08/27 02:56
2016/08/27 03:01
2016/08/27 12:27
0
既に以下で作成していました。
$filename = date("YmdHis").$_FILES['userfile']['name'] . ".html";
$dirname = './' . $y . '/' . $m . '/';
.....
fopen( "./" . $y . "/" . $m . "/" . $filename, 'w'))
※省いているところもあります。
$filenameでそのままディレクトリを選択すれば良いことがマニュアルに記載してありました。
ですので以下のように修正すれば動作します。
$filename = "./".$y."/".$m."/".date("YmdHis").$_FILES['userfile']['name'] . ".html";
fopen( $filename, 'w'))
回答者様回答ありがとうございます。
大変助かりました。
長く対応して頂いた方にベストアンサーを選択させていただきました。
ありがとうございました。
投稿2016/08/27 16:43
総合スコア46
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。