• 締切済み

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
  • 回答数1
  • ありがとう数1

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>メイン(呼び出し側で、Echoしてもprint_rしても表示されません。 その部分はどのように書いていますか?当然ですが print convutf8($flepath1, $filepath2); とか $result = convutf8($flepath1, $filepath2); print $result; のように書いているんですよね(まさか、print $A; なんてことはないと思いますが・・・・)。

masaoxi
質問者

お礼

ありがとうございます。人生2個目の関数(言い訳)でしてまさかの print $A; って書いてました。1個目の西暦年を平成に変換するのは何となくうまくいっていて、調子にのって2個目作ってみたんですがうまくいかずに悩んでました、そうですよね、いきなり変数$Aをプリントせいって命令しても、なんのことかわかんないですよね試してみます。お恥ずかしい

関連するQ&A

  • 戻り値について

    実行PHPファイルから、モジュールPHPファイルを呼び出し、その戻り値を反映しています。 ---- ■実行PHPファイル $Command = "/usr/local/bin/php <<モジュールPHPファイル>>"; $Check = shell_exec($Command); if ($Check != 'NoError') { echo "エラー"; }else{ echo "エラーじゃない"; } ■モジュールPHPファイル …処理… echo "NoError"; exit; 結果: エラー ---- 必ずNoErrorを返すようにしているにも関わらず、 エラーの結果となってしまいます。 調べてみると、実行PHPファイルで文字列を受け取ると 8バイトとなっており、実際は「NoError」ではなく、「\nNoError」のように、 リターン値の前に改行コード(\n)が挿入されている状態となっています。 どちらのPHPファイルもEUC-JP、改行コードLF、 echo の前に無駄な文字列や、<?php及び?>の前後ろに改行もありません。 改行コードも一緒に返却されてしまう場合に、どのような理由が考えられるでしょうか。 お手数ですがご教示いただけますと幸いでございます。

    • ベストアンサー
    • PHP
  • 【PHP】CSVファイルの特定行を書き出す

    PHPでCSVファイルを読み込み、特定行のみを別のCSVファイルに書き出したいと思います。 作りたいものは、 http://example.com/file.php?repert=5 とすると、「002.csvファイルの5行目のみ」を「003.csv」に書き込むというものです。 下記で作りましたが、 Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\file.php on line 32 になります。 指摘された32行は ?> の行です。 ググると改行コードのトラブルのようでしたのでCR+LF CR LF と試しましたが、改善されません。 どこが不味いかご教示戴けませんでしょうか? 宜しくお願い致します。 <?php $repeat = $_GET['repert']; $inFile = '002.csv'; // 抽出元ファイル $outFile = '003.csv'; // 結果ファイル $inFp = fopen($inFile, 'rb'); $outFp = fopen($outFile, 'w'); while ($data = fgetcsv($fp, 10000)) { if ($count == $repeat) { { $outLineArray = array( 0 => $data[0], 1 => $data[1], 2 => $data[2] ); fputs($outFp, implode(",", $outLineArray) . ""); } } fclose($inFp); fclose($outFp); exit(); ?>

    • 締切済み
    • PHP
  • PHPでCSVデーターの表示について

    PHPでCSVデーターの表示について 教えてください。PHPでCSVデーターを表示したいのですが一覧表示ではなくテキストをクリックして特定のデーターを表示させようと考えております。 CSVデーターの中身(CSV.csv) 一郎,男,20歳 二郎,男,22歳 一子,女,24歳 二子,女,26歳 --data.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<p>',<a href="01.php">' . $name . '</a>','</p>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 一郎をクリックしたら一郎のデーターだけを(01.php)で表示させたいのですがよく分りません。 01.phpは今のところ一覧表示されるものを置いてあります。 --01.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<table border=1>'; echo '<tr>'; echo '<td>','名前','</td>'; echo '<td>'.$name.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','性別','</td>'; echo '<td>'.sex.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','年齢','</td>'; echo '<td>'.$age.'</td>'; echo '</tr>'; echo '</table>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 本を読んだり、ググったりしてヒントになる様な物を探しているのですが中々見つかりません。 初心者で申し訳ありませんが、どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHPの設定

    すいません、PHPの設定ファイルに、 "upload_max_filesize=2M" "post_max_size=8M" とあったんですが、それぞれ何のサイズを指定しているんでしょうか?

    • ベストアンサー
    • PHP
  • upload_max_filesizeを超えるファイルのアップロード

    phpにて動画ファイルをアップロードするプログラムを作成しています。 うまくアップロードされないため調べましたところ、upload_max_filesizeを超えたサイズだったためでした。 現状、2Mになってます。 レンタルサーバーなので、php.iniは触れないので、upload_max_filesizeを変えずに対応したいのですが、どうにか方法はないものでしょうか?

    • 締切済み
    • 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+csv+リストボックスで文字化け

    お世話になっています。 現在PHPからcsvファイルを読み込み、リストボックスに表示するという、 単純なプログラムを組んでいます。 しかし、文字化けが発生してしまいます。 csvファイル、phpファイル共に、utf8での保存を確認しています。 csvファイルはイレギュラーですが、#区切りで記入されています。 csvファイル 1#商社マン 2#プロ野球選手 phpファイル --省略-- <HEAD> <META http-equiv=content-type content="text/html; charset=UTF-8"> </HEAD> --省略-- <?php function GyousyuList(){ $listFile = fopen('./conf/gyousyu.csv','r'); ?> <SELECT><?php while($itemLine = fgets($listFile)){ $itemList = explode('#',$itemLine); $itemId = mb_convert_encoding($itemLine[0],'UTF-8'); $itemName = mb_convert_encoding($itemLine[1],'UTF-8'); ?> <OPTION value=<?php echo $itemId;?>><?php echo $itemName;?></OPTION> <?php }?> </SELECT> <?php return; } ?> <?php GyousyuList();?> --省略-- 実行結果は日本語・英語にかかわらず文字化けします。 実行結果 抜粋 <SELECT> <OPTION value="ï">»</OPTION> <OPTION value="2">#</OPTION> </SELECT> どうにも解決できません。 ちなみにmb_convertは外しても結果は変わりませんでした よろしくお願いします!

    • ベストアンサー
    • PHP
  • PHP CSV 出力

    失礼します。 現在PHPで指定したパスに置いてあるCSVを出力したいのですが、 CSVは出力できているのですが、HTMLが先頭に入ってしまいます。 htmlファイルに設置したボタンに対して phpファイルで処理をしています。 どこかおかしい部分があればご教授頂きたいです。 HTMLファイル <?php $self = $_SERVER["SCRIPT_NAME"]; ?> <form method='POST' action='<?php $self ?>'> <input type='submit' value='CSV出力' name='get_csv'> </form> PHPファイル function This_Month(){ $filepath = 'hoge.csv'; //ダウンロードしたいファイルパス $filename = 'test.csv'; //ダウンロードした際のファイル名 if(!file_exists($filepath)){ die("Error:File(".$filepath.") does not exist"); } //オープンできるか確認 if(!($fp = fopen($filepath,"r"))) { die("Error:Cannot open the file(".$filepath.")"); } fclose($fp); //ファイルサイズの確認 if(($content_length = filesize($filepath)) == 0){ die("Error:File size is 0.(".$filepath.")"); } //ファイルの処理方法 header('Content-Disposition: attachement; filename="'.$filename.'"'); //ファイルタイプ指定 header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding:binary'); //ファイルサイズ header('Content-Length: '.filesize($filepath)); mb_convert_encoding($filepath,'utf-8','shift-jis'); readfile($filepath); exit(); } //ボタンに合わせて条件を変えていく if(isset($_POST["get_csv"])){ //ユーザーから来たデータをエスケープする $csv_output = htmlspecialchars($_POST["get_csv"], ENT_QUOTES, "UTF-8"); switch ($csv_output) { case "CSV出力": ”This_Month();  break; default: echo "エラー"; exit; } }

    • ベストアンサー
    • PHP
  • phpコードの戻り値をhtmlファイルに入れるには

    こんばんは。 質問は.htmlファイルからphp関数を直接呼べるか否か、 呼べないとしたら.cgiなどを利用すればよい? 引数なしのphp関数の戻り値を.htmlの一部に出力させるにはどうしたら よいかです。 phpで作成したfunction fnc_test(){return "aaa";}の値を aaa.html内に出力させたいのです。 aaa.phpファイルにだったらecho fnc_test();で表示されると思うのですが、 aaa.htmlに<body>fuc_test();</body>とやってももちろんphpが起動せず、表示されませんよね。 同じ事をさせたいときにaaa.htmlを新しく作成すれば(phpにて"aaa"と書いたaaa.htmlと言う名前のファイルを作成)できると思うのですが、 動的に一部だけ変更するためにはjavascriptを利用するとか、cgiを利用(cgiでラップする?)しなければやっぱり駄目なのでしょうか? .htmlファイルにサーバ上でphpの関数の戻り値(テキスト)を組み込むのにはどうしたらよいですか?できたらjavascriptは使いたくないのですが。 乱文すみません。ご回答宜しく御願いします。

    • 締切済み
    • PHP
  • filesizeを使うとFatal errorに!

    環境:Win32/Apache2.4.0/5.3.9RC3(C:\apache\php) filesizeを使おうとするとエラーが出てしまいます。 <?php $filename = 'somefile.txt'; //もしsomefile.txtが作成されていなければファイルサイズは0バイト if(filesize($filename)=0){ echo "somefile.txtは未作成なので、たった今このファイルを作成しました。"; }else{ echo $filename . ': ' . filesize($filename) . ' bytes'; } ?> Fatal error: Can't use function return value in write context サーバーかphp側でfilesize関数を使えるよう設定しなければいけないのでしょうか。

    • ベストアンサー
    • PHP