• ベストアンサー

copy関数について

やまとです。 質問です。 開発環境はOS:Linuxで、PHPはバージョン3です。 copy関数を使っているのですが、IEでは正常に動作するのですが、 NNではエラーが出てしまいます。(NNのバージョンは6.2です) ロジックは以下の通りです。 if ( !copy( $file1 , $file2 ) ){ echo "失敗"; }else { echo "成功"; } NNではcopy関数は使えないのでしょうか? それとも、書き方が間違えているのでしょうか? 教えてください。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yurarinco
  • ベストアンサー率34% (20/58)
回答No.1

もちろんその5行を削除すればNNでもエラーにならない、 ということですよね。 でも、copyが実行されるのはサーバー側での話なので、 NNから送信された場合に、$file1や$file2に期待した 文字列が入っているかどうか確認してみるとどうでしょうか。

jyamato
質問者

補足

やまとです。 yurarincoさん、ご解答ありがとうございます。 文字列の内容をチェックして分かりました。 やりたかった事はファイルアップロードだったのですが、 <input type='file'・・・>を使ってコピー元のファイルを取得し、 LINUXのTMPフォルダに一時格納。そのTMPフォルダからある固定のパスに copyする処理でした。 参照ボタン(<input type='file' name='file1'・・・>)でファイル名取得時に、 NNとIEではファイル名の引数が違うのですね。 例えば、C:\aaa.txt というファイルを参照でアップロ-ドすると、 NNでは、$file1 = aaa.txt IEでは、$file1 = C:\aaa.txt と言うように。 一応NNとIEでcopyの処理を変えるようにして、解決しましたが、 他に何か良い方法がありましたら参考までに教えて頂ければうれしいです。 宜しくお願いします。

その他の回答 (1)

  • yurarinco
  • ベストアンサー率34% (20/58)
回答No.2

phpはあまり自信が無いのですが、フォームに <input type='file' name='file1'・・・> と書いてあった場合、phpの中では TMPフォルダ内のファイル名は、たとえば NNでは、$file1 = /tmp/php28495aaa IEでは、$file1 = /tmp/php28503aaa みたいな感じになっていて、$file1_nameの方は NNでは、$file1_name = aaa.txt IEでは、$file1_name = C:\aaa.txtとなっていないでしょうか。 で、この$file1_nameではなくて$file1の方を使ってcopy していたらNNでもIEでも関係なさそうな気がします。 で、もしかしたらどこかで$file1=$file1_nameとして しまっているので、$file=C:\aaa.txtとかになってし まっているのではないのかなぁと思います。 でもそれだとサーバー側でC:\aaa.txtというファイルは 無いのでうまくいかないのではないかと思います。 でもやまとさんが解決しているならそれでOKと 思います。(^^;

jyamato
質問者

お礼

やまとです。 >NNでは、$file1_name = aaa.txt >IEでは、$file1_name = C:\aaa.txtとなっていないでしょうか。 その通りです。(^^;) C:\aaa.txt をIEでアップロードした場合、サーバには /tmp/php28503aaa/C:\aaa.txtみたいに訳の分からないファイルができてしまうみたいですね。(^^;) copy時にstrpos(),substr(),strrchr() を使ってファイル名だけを取得する処理が必要ではと思いました。 実際、その関数達を使ってファイル名だけ取得し、IEでもNNでもアップロードできるようになったのですが。。。 yurarincoさん。ありがとうございました。 変数の中身を確認してみては??と言うご指摘が無ければまだ悩んでいたでしょう。 助かりました。m(__)m

関連するQ&A