file_existsが動作しない

このQ&Aのポイント
  • $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } という形で画像ファイルが存在するかを調べているのですが、PHPに直接記述した場合動作し、functionの中に入れると動作しなくなるのはなぜでしょうか?
  • 上記のfunction内に入れた場合、returnの値が「ないよ!」になってしまうのです。どうぞよろしくお願い致します。
回答を見る
  • ベストアンサー

file_existsが動作しない

お世話になります。 $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } という形で画像ファイルが存在するかを調べているのですが、PHPに直接記述した場合動作し、functionの中に入れると動作しなくなるのはなぜでしょうか? function pict($test){ $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } return $var; } 上記のfunction内に入れた場合、returnの値が「ないよ!」になってしまうのです。 どうぞよろしくお願い致します。

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

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

file_existsはHTTP経由では使えません。ステータスコードを調べる手段が最も適切なのではないでしょうか。 function url_exists($url) { $h = (array)@get_headers($url); return $h[0] && !strpos($h[0], '404'); }

news_0203
質問者

お礼

ご回答ありがとう御座いました。 上記の方法でIf分岐が行えました。大変助かりました。 しかしなぜ同じ記述で動く箇所と動かない箇所があるのかがいまいちまだ把握できませんが…無事動いてなによりです。 functionの中ではHTTP経由になってしまうとかなのでしょうか?

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

function版の > $test = 1; は何のためにあるのでしょうか? 具体的にどんな呼び出しをしたのでしょうか? このプログラムだと"1jpg"というファイルの存在を探そうとしますが、それで正しいのですか?(1.jpg ではありません) プログラムに間違いがあるか、ここに書いたときに間違えたのか、まずははっきりさせましょう。 表示させる等、$logo_url が実際にはどんな文字列になっているかを調べ、それが期待したものかどうかを調べましょう。可能はら、本体に記述したものと、functionに記述したもので違いが無いか調べましょう。 ここに書かれた内容だと、同じ hogehoge/logo/1jpg の存在を調べようとし、同じ結果になると思います。

news_0203
質問者

補足

記述間違い失礼しました。 function版の「$test=1;」は不要で、echoした「$logo_url」(http://hogehoge/logo/1.jpg)をブラウザに貼り付けると画像が表示されるのですが…。

関連する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
  • file_exists('http://192.168.0.9/x.php');

    が機能しません file_exists('/var/www/html/x.php'); (FC4を使っている) や include('http://192.168.0.9/x.php'); は 機能します どうしたら file_exists('http://192.168.0.9/x.php'); も機能するようになるでしょうか? file_existsの引数がURLのときにも機能するようにするにはどうすればよいのでしょうか?

    • ベストアンサー
    • PHP
  • ループ処理された中でfile_existsによる画像サイズが取得できま

    ループ処理された中でfile_existsによる画像サイズが取得できません。 ループlist関数で変数代入しDisp_Img_Tag_02関数へ引数を渡した場合に引数側へ変数は渡っていることは確認しているのですが、問題解決に至りません。コードの問題指摘と解決方法をアドバイスください。 ログファイル/  1,ばなな,黄色いくだものです,1278105473-01.jpg <?php $logfile = "./db.csv"; //ログデータ $array_log = file($logfile); for($i=0; $i<count($array_log); $i++){ list($code,$text_01,$area_01,$img_01_Filename) = split(",", $array_log[$i]); echo Disp_Img_Tag_02("1278105473-01.jpg")."<br>"; //(1)直接ファイルを指定 echo Disp_Img_Tag_02("$img_01_Filename")."<br>"; //(2)***ここが問題です。 } echo "<br><br>"; $img_01_Filename = "1278105473-01.jpg"; echo Disp_Img_Tag_02("1278105473-01.jpg")."<br>"; //確認用OK echo Disp_Img_Tag_02("$img_01_Filename")."<br>"; //確認用OK function Disp_Img_Tag_02($img_name, $type) { $path = realpath( "." )."/img/"; //アップロード画像パス $up_dir = '/img/'; //画像リンク先パス $w_admin_max = 30; //管理用サイズ $h_admin_max = 30; $w_user_max = 100; //ユーザー用サイズ $h_user_max = 100; $img_tag = ""; if($img_name && file_exists("$path$img_name")){ list($width, $height, $dummy01, $dummy02 ) = getimagesize("$path$img_name"); if($width > $w_admin_max || $height > $h_admin_max){ $w_rate = $w_admin_max / $width; $h_rate = $h_admin_max / $height; ($w_rate < $h_rate) ? $key = $w_rate : $key = $h_rate; $width = (int) $width * $key; $height = (int) $height * $key; $img_tag = $img_tag."<a href=.$up_dir$img_name target=_blank><img src=.$up_dir$img_name width=" . $width . " height=" . $height . " border=0></a>\n"; }else{ $img_tag = $img_tag."<img src=.$up_dir/$img_name border=0>\n"; } $img_tag = $img_tag."<input type=hidden name=fname01 value=\"$img_name\"><input type=checkbox name=fname01_del value=1>削除\n"; $img_tag = $img_tag." 上書:<input type=file name=upfile01 size=15>\n"; }else{ $img_tag = $img_tag."登録 <input type=file name=upfile01 size=20> 確認用ファイル名 $img_name\n"; } return $img_tag; } ?>

    • ベストアンサー
    • PHP
  • onMouseoverについて教えてください。

    前回は、onMouseoverで文字にマウスを合わせると関連するimgが変わる。 というもを作りました。 皆様の助言やご指摘のおかげで完成致しました。 本当にありがとうございます。 今回は追加機能として、マウスを対象文字に合わせている間、関連するimgが点灯するというのを作りたいのです。 ----------html------------------------- <div id="mapimg"> <!-- 地図--> <IMG id="myIMG1" src="../img/map/1f/map.jpg" width="433" height="469" border="0"> </div> <a href="○○○" id="7map" onMouseover="return setInterval(Swap('myIMG1', '../img/map/1f/7map.jpg'),200);" onMouseout="return Swap('myIMG1', '../img/map/1f/map.jpg');" title="test">TEST</a><br> ----------javascript-------------------- function Swap(iID, img_url){ var myobj = document.getElementById(iID); if(myobj.src == img_url){ myobj.src = "../img/map/1f/map.jpg"; }else{ myobj.src = img_url; } return false; } 素人なりに考えて、「setInterval」を使って、一定の間隔で関数を呼び出し、元のimgと表示(点灯)imgを繰り返し表示すればいいと思ったのですが、上手く行きません。 どなたか助言をお願いいたします。 未熟者でソースが汚いのですが、お願いいたします。

  • クリックでリンク先の切り替え

    お世話になっています。 基本かもしれませんが、どうしても分からないので質問させてください。 クリックしたときにリンク先を変更したいのです。 <script> var i=1; function change(){ i++; if(0==i%2){ document.shop_img.src="test1.jpg"; }else{ document.shop_img.src="test2.jpg"; } } </script> クリックされた回数に応じて、画像の切り替えとリンクの切り替えをしたいのです。 <a href="http://www.test.jp"><img src="test2" name="shop_img" /></a> 画像の切り替えはOKで、あとは画像を囲っているリンク先のURLをクリックするごとに切り替えしたいのですが、どうしても分かりませんでした。 分かる方、ぜひ教えてください!

  • jqueryでフラグの立て方

    知識のある方に教えて頂きたいことがございます。 以下の記述をご覧いただけますでしょうか。 $(window).on('scroll',function(){ var flg; flg = 0; if(flg == 0){ flg = 1; hoge(); }else return; }); function hoge(){ console.log('test'); } やりたいことは、スクロールしたら 一度だけhoge()を実行したいです。 その為、最初にflg=0にして、関数内でflg=1にしたのですが、 スクロールするごとにflg=0と上書きされてしまうので、 毎度実行されてしまいます。 一度だけhoge()を実行させるために、どのようなフラグの書き方を すればいいか教えて頂けませんでしょうか。 宜しくお願い致します。

  • イベントリスナーに設定した関数内で、id属性の値を取得するには

    IEでイベントリスナーに設定した関数で、イベントを発生させた要素のid属性値を取得する方法が分からずに困っています。 記述したコードは下記のようになります。Firefoxではうまく動作しました。 clickHandler内でFirefoxのe.currentTarget.idに対応するような処理はどのように行えばよいでしょうか。 ------------ JavaScript部分 ----------------------- function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; } else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r; } else { elm['on' + evType] = fn; } } function clickHandler(e) { var id; if (document.all && !window.opera) { // IEの場合に、ここの処理でid属性の属性地 hoge1やhoge2を取得したい。 // id = window.event.srcElement.id; これではだめ } else { id = e.currentTarget.id; } // idに応じた処理 } var elm1 = document.getElementById('hoge1'); var elm1 = document.getElementById('hoge2'); addEvent(elm1,'click',clickHandler,false); addEvent(elm2,'click',clickHandler,false); ------------ HTML部分 ----------------------- <li><a id="hoge1" href="#"><img src="●●" /></a></li> <li><a id="hoge2" href="#"><img src="●●" /></a></li> 先に進むことができずに困っています。よろしくお願いします。

  • jqfloat.jsを複数の画像に適用したい

    javascriptで7枚の画像をブラウザの中にランダム配置で表示させ、 さらにjQueryのjqfloat.jsで画像をふわふわ動かす、というものを作っています。 ランダム配置まではうまくいったのですが jqfloatが7枚のうち1枚にしか適用されず困っております。(最後のid='fuwa'のところ) jsの勉強を始めたばかりでスクリプトの書き方が変だったりするかもしれませんが… どなたか対処法を教えていただけませんでしょうか。 どうぞよろしくお願い致します! <script type="text/javascript"><!-- $(document).ready(function() { $('#fuwa').jqFloat({ width: 50, height: 50, speed: 2500 }); }); var images = [ {img : "1.png" , url : "http://1.com"}, {img : "2.png" , url : "http://2.com"}, {img : "3.png" , url : "http://3.com"}, {img : "4.png" , url : "http://4.com"}, {img : "5.png" , url : "http://5.com"}, {img : "6.png" , url : "http://6.com"}, {img : "7.png" , url : "http://7.com"} ]; images.sort(function(){return Math.random() - Math.random();}); function getBrowserWidth ( ) { if ( window.innerWidth ) { return window.innerWidth; } else if ( document.documentElement && document.documentElement.clientWidth != 0 ) { return document.documentElement.clientWidth; } else if ( document.body ) { return document.body.clientWidth; } return 0; } function getBrowserHeight ( ) { if ( window.inneHeight ) { return window.innerHeight; } else if ( document.documentElement && document.documentElement.clientHeight != 0 ) { return document.documentElement.clientHeight; } else if ( document.body ) { return document.body.clientHeight; } return 0; } Imgn=7; for (i=0; i < Imgn; i++){ xpx = 50+Math.floor(Math.random() * (window.innerWidth -280)) + 1; ypx = 30+Math.floor(Math.random() * (window.innerHeight -300)) + 1; thumbs="<div style='position:absolute;left:"+ xpx +"px;top:"+ ypx +"px;' id='fuwa'><a href='"+images[i].url+"'><img src='"+images[i].img+"'></a></div>"; document.write(thumbs); } </script>

  • 効果付きの画像変化

    画像を効果を付けて変化をさせて、三回変化したら、変化を終了させたいんですけど、下の記述に何を加えたら良いか分かりましたら教えて下さい。お願いします。 img#img1 { filter: progid:DXImageTransform.Microsoft.RandomDissolve(Duration=2.0); } --> </style> <script language="JavaScript"> <!-- function SymError() { return true; } window.onerror = SymError; var SymRealWinOpen = window.open; function SymWinOpen(url, name, attributes) { return (new Object()); } window.open = SymWinOpen; //--> </script> <script type="text/javascript"> <!-- var ie = navigator.userAgent.indexOf("MSIE "); var verIE = 0, winIE = -1; if(ie >= 0) { verIE = parseFloat(navigator.userAgent.substr(ie + 5)); winIE = navigator.userAgent.indexOf("Windows"); } var photo = new Array("aki1.jpg", "aki2.jpg", "aki3.jpg"); var i = 0; function transImage2 () { var trans = 0; var img = document.images['img1']; if(verIE >= 5.5 && winIE >= 0) { if(img.filters) trans = img.filters[0]; } if(img.complete) { i++; if(i >= photo.length) i = 0; if(trans) trans.apply(); img.src = photo[i]; if(trans) trans.play(); } setTimeout("transImage2()", 4000); } //--> </script> </head> <body onload="setTimeout('transImage2()', 4000);"> <table> <tr> <td> <img name="img1" id="img1" src="aki1.jpg" width="240" height="180" alt=""> </td> </body>

  • 戻り値必要なし

    JavaScript初心者です。 戻り値なしの関数について。return とreturn falseでは何か違うのでしょうか? function test(){ if(flag) return; var num=1+2; } function test2(){ if(flag) return false; var num=1+2; } よろしくお願いします。

専門家に質問してみよう