• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【初歩?】functionの使い方)

初歩?functionの使い方

このQ&Aのポイント
  • 初歩ながらも,PHPのfunctionを使ってPDFのファイルサイズを取得する方法を紹介します.
  • index.phpに書き込んだコードが正しく動作していない場合の解決策も提示します.
  • 詳しい手順については,以下のページを参照してください.

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

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

>なかなか奥が深いですね(基本ではあるのでしょうが。。。) とりあえず「基本」を先にやった方がいいと思います。htmlと違い"/"から書くとフルパス(サーバパス)になります。 というかhtmlの場合はそのホスト名に対するDocumentRootからのパスなので、考え方として「最上位から」というのは同じです。

litton101
質問者

お礼

agunuzさん、本件では大変お世話になりました。 >とりあえず「基本」を先にやった方がいいと思います。 まったく仰せのとおりです、考え方もまったく想像でやっていたようです。 結論的には。#3の補足に書きました >"./pdf/"  を './pdf/' (シングルクォーテーション)に改めたらyesが返ってきました ここを頼りにいろいろいじっていたら、無事動作するようになりました。 親身に相談に乗っていただき、本当にありがとうございました。 また基礎から勉強いたしますm(_ _)m

その他の回答 (3)

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

>これが、どうしても繰り返し使いたいのですが、 当然ですが、使う分にはどこで何度使ってもいいです。 が、関数の「定義」は1回でいいです(でなければ関数にする意味がありません)。 <?php $arr = array(0, 1, 2, 3, 4); foreach ($arr as $val) { print func($val); } function func($arg) { return sprintf('%02d<br>', $arg); }

litton101
質問者

お礼

agunuzさん、大変お世話になっておりますm(_ _)m > 当然ですが、使う分にはどこで何度使ってもいいです。 > が、関数の「定義」は1回でいいです(でなければ関数にする意味がありません)。 一晩考え抜いてようやく「あ、確かにそうだ」と理解できました。 function定義はループ(while)の「外」に出し、 while内で使いたいところで get_file_size($file); と呼び出せばよいわけですね、、、(^_^; それと、 $mfile = str_replace(esc_url(home_url('/'))."pdf/",ABSPATH,$file); を $mfile = str_replace('/'."pdf/",ABSPATH,$file); に改めましたが、「ABSPATH」もWordPressの関連のようですね、 もうちょっと突き詰めると、str_replaceなどしなくても、 $mfile = "./pdf/" . $file; でよいような気がしますが、思いつく弊害などありますでしょうか。 さらに、いろいろやってもやはり真っ白なHTMLが返ってきます。 そもそも論として、以下を実行しても真っ白…。file_existsでPDFは拾えないなど聞いたことも ないですけど、こちらもお心あたりあればご教示をお願いできれば幸いです。 $file = "241.pdf"; if ( file_exists( "./pdf/" . $file )) { echo "yes"; } 長引かせて申し訳ございませんm(_ _)m

litton101
質問者

補足

$file = "241.pdf"; if ( file_exists( "./pdf/" . $file )) { echo "yes"; } の、 "./pdf/"  を './pdf/' (シングルクォーテーション)に改めたらyesが返ってきました なかなか奥が深いですね(基本ではあるのでしょうが。。。)

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

>esc_urlというのは、WordPressでないと使えないのでしょうか? php標準の関数ではありませんからね。 http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/esc_url ただ、やっていることはURLの無害化(エスケープ)ですから、提示されたような使い方ならエスケープする必要はありません(渡された $file をそのまま使っていい)。 >Fatal error: Cannot redeclare get_file_size() (previously declared in D:\www\index.php:69) >in D:\www\index.php on line 69 関数の記述をループ(whileとかforとかforeachとかdoとか)の中で行っていませんか?記述は1回でもループのたびに定義しようとしますのでエラーになります。 functionは『最後にまとめて』記述してください。

litton101
質問者

お礼

agunuzさん、たびたびのご教示恐れ入ります。 まずは御礼申し上げます。 > php標準の関数ではありませんからね。 そうでしたか。解説ページまでお示しいただき恐縮です。 > 提示されたような使い方ならエスケープする必要はありません 安心しました、外させていただきます > 関数の記述をループ(whileとかforとかforeachとかdoとか)の中で モロ、ビンゴでした(^_^; (while) そうですよね、そうですよね、 結構調べたつもりだったのですが、完全にうっかりしてました。 (でも原因特定できて支えがとれた思いです) > functionは『最後にまとめて』記述してください。 これが、どうしても繰り返し使いたいのですが、 while (~~~) { $i++; function get_file_size . $i ($file){ みたいな力技とか使えないですかね? 「関数名 変数」とか「繰り返し function php」ですとか。 検索した限りではそのものズバリは見つからないようですが・・・

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

>echo $filesize; echo get_file_size($file); としてください。 $filesizeは関数内で使っている変数です(スコープが関数内に限られます)。変数ではなく返す値(戻り値)でファイルサイズを返しています。

litton101
質問者

お礼

agunuzさん、早速ご回答ありがとうございました。 (1) 早速仰せのとおりやってみると、今度は以下のエラーです。 esc_urlというのは、WordPressでないと使えないのでしょうか? Fatal error: Call to undefined function esc_url() in D:\www\sample.php on line 5 さらに悩みを打ち明けますと、 (2) (元質問のsample.phpではなく)、本番環境の「index.php」の方へ組み込みますと、上記の「echo get_file_size($file);」とか、「esc_url()」の問題以前に、次のようなエラーが。 Fatal error: Cannot redeclare get_file_size() (previously declared in D:\www\index.php:69) in D:\www\index.php on line 69 Googleで調べてみると ●「Fatal error: Cannot redeclare」というのは、同じ名前のユーザー定義関数を何度も定義した場合などに表示されることは分かりましたが、(include、requireを含め)重複定義はないです。 ●関数名を、「get_file_size()」から「get_pdffile_size()」とか「get_file_size2()」などにリネームしても、同じエラーを引きずります。 ●if (!function_exists('get_file_size')) {}でくくると、function自体がスキップされてしまいます。 何か妙案ありますでしょうか(次から次へとスミマセン)

関連するQ&A