プロが教えるわが家の防犯対策術!

基本的な質問かもしれず申し訳ないのですが、どうしてもできないので質問します。

以下のコードでファイルコピーを試みているのですがうまくいきません。

$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のように変数にするとうまくいきません。//を\\\\\とかに変えたりしてみたのですがだめでした。
どなたか教えてください。宜しくお願い致します。

A 回答 (2件)

> $store_file をprintで実際に書き出してみると


> //***.**.**.***/data/\phpdata/copyfile.xlsとなり問題なそうでした。

これは、
> 直接'//***.**.**.**/data/copyfile.xls'のようにパスを入力する
と異なるパスになっていますが、それれが影響しているということはないでしょうか?

> また、PHPはwarrningのようなエラーは特に出力しません。
PHPのエラー出力が抑制されているということはないでしょうか?
error_reporting(E_ALL);
を挿入してエラーが出るようにならないでしょうか。
あるいはWEBサーバーのエラーログを見るか。

とかですかね。

この回答への補足

//***.**.**.***/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>

補足日時:2009/07/19 02:10
    • good
    • 0

$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/ …

この回答への補足

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

補足日時:2009/07/11 03:28
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/15 00:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!