• 締切済み

phpで変数を使ってcopyできない

基本的な質問かもしれず申し訳ないのですが、どうしてもできないので質問します。 以下のコードでファイルコピーを試みているのですがうまくいきません。 $store_file = "//***.**.**.**/data/" . $_FILES['upfile']['name']; if(!copy($_FILES['uplfile']['tmp_name'],$store_file)) { print "失敗<br>"; } 試しにcopy($_FILES['uplfile']['tmp_name'],$store_file)) の部分の$store_fileに直接'//***.**.**.**/data/copyfile.xls'のようにパスを入力するとうまくいくのですが、それを$store_fileのように変数にするとうまくいきません。//を\\\\\とかに変えたりしてみたのですがだめでした。 どなたか教えてください。宜しくお願い致します。

みんなの回答

  • tk_uc
  • ベストアンサー率68% (33/48)
回答No.2

> $store_file をprintで実際に書き出してみると > //***.**.**.***/data/\phpdata/copyfile.xlsとなり問題なそうでした。 これは、 > 直接'//***.**.**.**/data/copyfile.xls'のようにパスを入力する と異なるパスになっていますが、それれが影響しているということはないでしょうか? > また、PHPはwarrningのようなエラーは特に出力しません。 PHPのエラー出力が抑制されているということはないでしょうか? error_reporting(E_ALL); を挿入してエラーが出るようにならないでしょうか。 あるいはWEBサーバーのエラーログを見るか。 とかですかね。

7535sima
質問者

補足

//***.**.**.***/data/\phpdata/copyfile.xls //***.**.**.**/data/copyfile.xls の違いは私のタイプミスでした。すみません。 error_reporting(E_ALL); を挿入してみましたが、NOTICEはでますがWARRNINGはでませんでした。 たまたま以下のコードを他サイトでみつけて試してみたところ動きました。とりあえず目的のことができそうなのでこれでいいのかなと思っています。 // ファイルを保存するディレクトリ $save_dir = "//***.**.**.**/data/"; $enc_disp = "EUC-JP"; // ブラウザ表示文字コード $enc_file = "SJIS"; // 保存ファイル名文字コード // ファイルがアップロードされたものなら処理をする if (is_uploaded_file(@$_FILES["upfile"]["tmp_name"])) { // ファイル名の文字コードを変換する $file_name = $save_dir.$_FILES["upfile"]["name"]; $det_enc = mb_detect_encoding($string, $enc_disp . ", " . $enc_file); if ($det_enc and $det_enc != $enc_file) { $file_name = mb_convert_encoding($file_name, $enc_file, $det_enc); } // テンポラリファイルを保存ディレクトリにコピー copy($_FILES["upfile"]["tmp_name"], $file_name); echo "<p>ファイルアップロード完了"; echo "<p>ファイル名:".$_FILES["upfile"]["name"]; } ?> <form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]?>" method="post"> <input type="file" name="upfile"> <input type="submit" value="アップロードする"> </form>

  • tk_uc
  • ベストアンサー率68% (33/48)
回答No.1

$store_file = "//***.**.**.**/data/" . $_FILES['upfile']['name']; とした場合、$store_file は実際にどのような内容になっているのか確認しましたか? また、copyの際にphpはどんなエラーを出力しました? ちなみに、なぜ一時ファイルをcopyしようとされているのかわかりませんが、セキュリティ上、move_uploaded_fileを使うべきです。 少なくとも、copyの前にis_uploaded_fileでチェックしましょう。 ※質問に書いてないだけで実際のコードには書いてあるかもしれませんけど。

参考URL:
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/php/manual/features.file-upload.html
7535sima
質問者

お礼

連絡がおそくなりすみません。 $store_file をprintで実際に書き出してみると //***.**.**.***/data/\phpdata/copyfile.xlsとなり問題なそうでした。 また、PHPはwarrningのようなエラーは特に出力しません。

7535sima
質問者

補足

早々に回答を頂きながら返答が遅くなりすみません。 転送メールで本回答をみたため、PC操作できる環境におりません。 大変申し訳ないのですが、明後日に確認できますので、また追って返答いたします。

関連するQ&A