• ベストアンサー

copy関数について

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

  • PHP
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • CekePHPでfile_exists関数を使う

    CakePHP Ver1.3.6で開発をしています。 アクションの中で、画像の存在判定にfile_exists関数を使ったのですが、 2バイトのファイル名のファイルの場合、存在するファイルがfalseになって しまいます。 対象のファイルが存在するときに、 if (file_exists('img/漢字.jpg')) echo 'あります'; else echo 'ありません'; if (file_exists('img/filename.jpg')) echo 'あります'; else echo 'ありません'; このとき、前者は’ありません’、後者は’あります’と表示されます。 app/webrootフォルダにtest.phpを作り、その中で同じ判定をすると、 両方とも’あります’と表示されます。 なぜアクションの中に記述したときのみ、2バイトファイル名を正しく 判定できないのでしょうか?

    • ベストアンサー
    • PHP
  • copy関数について質問です

    こんにちは copy関数について質問です まず、何がしたいのかといいますと、少し長くなるのですが… あるリストをテキストファイルで作成して、内容を読み込んでHTMLに表示 HTMLファイルはPC用、携帯用とあり、PCがEUC 携帯がSJISになっています ファイルの更新プログラムはPCにあわせてEUCで作成しているので PC用のファイル更新・表示も出来ている状態です で、PC用のファイル更新が終わったら、PC用のファイルを携帯用にコピー したいと思ったのですが、文字コードが違うので普通にcopy()を使っても 携帯用のHTMLでは表示出来ないという訳です これまでは、FFFTPを使って EUCで繋いでPC用ファイルをDL→SJISで繋ぎ直して携帯用ファイルをUP ということをしていたのですが、これをPHPで処理出来ないものかと… ↑の処理さえ出来るなら特別copy関数を使う必要はないのですが 何かいい知恵があれば、アドバイス頂けますか??

    • ベストアンサー
    • PHP
  • ファイルのコピーについて

    $file = './hoge/index.html'; $file_to = './hoge/index2.html'; //コピー成功 ↓ $file_to = './hoge/php/index.html'; //コピー失敗 if(copy($file, $file_to)){ echo "コピーしました。:"; } else{ echo "コピーに失敗しました。:"; } 同じ階層にコピーファイル作成は成功するのですが、 ディレクトリを下げた階層にコピーファイルを作成しようとすると失敗してしまいます。 パーミッションの設定がわるいのか権限がないのか、よくわかりません。 エラー内容 Warning: copy() [function.copy]: SAFE MODE Restriction in effect. The script whose uid is 10124 is not allowed to access 教えて下さい。お願いします。

    • 締切済み
    • PHP
  • ファイル内検索関数を作りたいのですが・・・

    質問させて下さい。 PHPファイル内で危険な関数、非推奨になった関数が含まれているかをチェックするスクリプトを考えています。 php.iniにてdisable_functionsを使用すればいいのでしょうが、急に非推奨になったり、 コード規約で省かれたりと言った時に対処するような場合に使用したいと思っております。 コマンドラインから利用しようと思っているのですが、ここでは簡略化の為に引数を取って、1ファイル(check.php)のみに適用させています。 で、以下のように書いてみたのですが、全くエレガントな感じがしません。 自分としては、ファイルにHTMLに<table>にて整形したものを出力したいと考えています。 「どの関数が、どの行に、いくつあるのか」(フォルダを再帰的に調べる場合はパスも含める) 等を出力したいと考えています。 ((search.php) #!/usr/local/bin/php -q <?php $file = $argv[1]; if (!$file) { die('このスクリプトは引数にphpファイルのパスを必要とします。'); } //この中に該当する関数を書き入れる $functions = array( 'preg_match', 'chdir', 'settype', 'system', ); function checkFunc ($line, $functions, $n = 1) { foreach ($functions as $func) { if (strpos($line, $func) === FALSE) { continue; } else { echo($n . '行目に、' . $func . '()が含まれています。' . PHP_EOL); } } } $handle = fopen($file, 'r'); $r = 1; while ($line = fgets($handle, 1024)) { checkFunc($line, $functions, $r); $r++; } fclose($handle); ((check.php)) <?php $string = 'Hello, this is Tom. I love apple'; preg_match('/.*(apple)$/i', settype($string, 'string'), $result); var_dump($result); var_dump(getcwd()); chdir('../'); var_dump(getcwd()); もうちょっとスマートに書きたいのですが、アドバイスを頂けないでしょうか? 自分としてはecho()で出力していくのではなく、「どの関数が、どの行に、いくつあるのか」を貯めていって、 Smartyの変数にassign()で格納し出力といった感じにしたいと思っているのですが、 「どのファイルに」「何行目」、「どの関数が」、「何個」という各変数の扱い方(格納の仕方)が分かりませんでした。 Linux,PHP5.3.8です。

    • ベストアンサー
    • PHP
  • phpのコードでこの2つは何が違うんでしょうか?

    phpのコードでこの2つは何が違うんでしょうか? 問題文が画像に書いてあるもので、上のコードは私が考えたもので、下のコードは画像の問題の答えです 私の解いた答え <?php $age = 10; if(10 <= $age < 20){ echo("10代"); }else if(20 <= $age < 30){ echo("20代"); }else if(30 <= $age < 40){ echo("30代"); }else{ echo("それ以外"); } 画像の問題文の正解 <?php $age = 43; if($age >= 10 && $age < 20){ echo("10代"); }else if($age >= 20 && $age < 30){ echo("20代"); }else if($age >= 30 && $age < 40){ echo("30代"); }else{ echo("それ以外"); }

    • ベストアンサー
    • PHP
  • PHPでMySQLのDBに接続

    PHP,MySQLが使えるレンタルサーバーを借りているのですが, PHPでMySQLに接続し、php_dbを選択をするようにしたいのですが、 この時DBファイルはどこに置けばいいのでしょうか? 現在はMySQLの管理コマンド(?)とは別にpublic_htmlの中に PHPフォルダを作り、そこにDBファイルを入れています。 PHPのスクリプトは <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>練習</title> <meta http-equiv="content-language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head><body> <?php $con = mysql_connect(); if (!$con) { echo ("Error:MySQLに接続できませんでした。<br />"); } else { echo ("接続ID=$con<br>\n"); } $selectdb = mysql_select_db("php_db" ,$con); if (!$selectdb) { echo ("Error:データベースを選択できませんでした"); } else { echo ("データベースphp_dbを選択しました。"); } ?> </body></html> としています。 MySQLには接続ができるのですが、php_dbには接続ができません。 php_dbのおき場所を変えるのか、ファイルの指定が間違っているのか その他、どの要に変更をしたらよいのでしょうか? お願いします。 環境はレンタルサーバーがLINUXでPHPのバージョンなどはわからないんです・・・!! 開発がOSがW2kでFTPで転送してます。

    • ベストアンサー
    • PHP
  • phpで画像のような問題があり、私が書いた式は以下

    phpで画像のような問題があり、私が書いた式は以下になりますが これは間違っていますか? ifelse確認問題 <?php $age = 10; if(10 <= $age < 20){ echo("10代"); }else if(20 <= $age < 30){ echo("20代"); }else if(30 <= $age < 40){ echo("30代"); }else{ echo("それ以外"); }

    • ベストアンサー
    • PHP
  • phpのパス指定

    初めてphpを触っています。 いくつかの処理を外部ファイルにしたいのですが パスの指定が悪いのか、同じ階層に置いたり、いろいろ試してもfatal error ばかりです。 どこが悪いのか、教えていただけないでしょうか? サンプルとして、moto.phpのなかのincludeフォルダー内の外部ファイル:func.phpを実行することとします。 moto.php <?php require "./include/func.php"); $a = 2; $b = 1; $c = $a - $b * $a; echo return_word($a); echo "<br>"; //改行 echo return_word($b); echo "<br>"; //改行 echo return_word($c); ?> func.php <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> コマンドラインから php moto.php を実行すると <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> Fatal error: Call to undefined function return_word() in C:\xxxxxx\php\moto.php on line 9 となってしまいます。 外部ファイルは見えているようなのに、どうして関数がundefined になってしまうのでしょうか? phpの基本的なことなのかもしれませんが よろしくアドバイスお願いできればと思います。

    • ベストアンサー
    • PHP
  • phpの自作関数の戻り値について

    PHPで任意のCSVファイルをアップロードしてUTF6で別名保存するという関数です。 メインのupload.phpから require_once('UTF8CONV.php'); で呼び出しています。メインの部分は動きますが、戻り値(メッセージを変数で返したい)がうまくいかず並んでいます 以下UTF8CONV.php <?php //linuxのnkfコマンドでSJISからUTF8にファイル変換 //$INfile='sjistest.csv'; //$OUTfile='utf8.csv'; //パス自動取得する。 function convutf8($INfile,$OUTfile) { if(isset($_SERVER['DOCUMENT_ROOT'])||isset($_SERVER['PHP_SELF'])) { $PHPSELF=explode('/',$_SERVER['PHP_SELF']); $getpath= $_SERVER['DOCUMENT_ROOT'].$PHPSELF[1]; $command="nkf -w -Lw "."$getpath/"."upload/"."$INfile"." > "."$getpath/"."upload/"."$OUTfile"; //echo $command; exec($command); } else {$A="パス情報が取得できません"; return $A; } $filesize=filesize("$getpath/"."upload/"."$OUTfile"); if (!file_exists( "$getpath/"."upload/"."$OUTfile" )) { //echo "<br/>"; $A="ファイルが存在しません"; return $A; } else { $A="アップロードされたファイル".$OUTfile."は文字コードUTF8でファイルサイズは".$filesize."バイトです。"; return $A; } } ?> returnをechoに置き換えうると、表示されますが「return」でメイン(呼び出し側で、Echoしてもprint_rしても表示されません。CSVテキストとはアップされ、UTF8にOUTfileで指定した名称で保存されています。Returnの変数をJAVASCRIPTで情報window表示したいので、変数でほしいです。

    • 締切済み
    • PHP
  • function_exists関数の挙動について

    以下のphpのコードを実行すると、 「hogehoge()関数が定義済みです。」とブラウザに表示されます。 ですが、スクリプトは上から下へ向かって実行されるわけで、 <if(function_exists('hogehoge'))>の箇所では、hogehoge関数はそんざいしないのでfalseに なると思うのです。 いったいどういう理屈なんでしょうか? よろしくお願い申し上げます。 (なお、下記ソースではタブを全角空白4文字に変換しています) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>関数が定義済みか調べる</title> </head> <body> <div> <?php if(function_exists('hogehoge')){     echo 'hogehoge()関数が定義済みです。'; }else{     echo 'hogehoge()関数は未定義です。'; } function hogehoge(){} ?> </div> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう