• ベストアンサー

テキストファイルを経由しての画像呼び出し

はじめまして。 PHPをはじめてまだ間もない者ですが、行き詰ってしまいましたのでご質問させていただきたいと思います。 画像をアップロードする時に backimg.txt という名前でファイル名を取得しているのですが それを利用して画像を呼び出そうとしているのですがどうにも表示してくれません。 表示どころか、エラーが出てしまいます… ファイル構成・PHP部分は以下の通りです。 public_html ├─ index.php  ←ここの一部のプログラムです ├─  ・ ├─  ・ └─ background_img     ├─ backimg.txt  アップロードしたファイル名が記述     └─ test.jpg   アップロードした画像 <?php if(file_exists("background_img/backimg.txt")){ $fp = fopen("background_img/backimg.txt","r") or die("ファイルのオープンに失敗しました"); $buff = fgets($fp); fclose($fp); } echo'<img src="'.$buff.'" border="0">'; ?> ※この $buff = fgets($fp); の部分でエラーが出ます。 backimg.txt内の文字(UPする度、この一行を上書きしていってます) ──────────────────   background_img/test.jpg ────────────────── ※PHPでアップロードした画像は  background_img フォルダに入るようになっています。 ※画像名はまちまち変わりますので、 test.jpg 固定ではありません。 ※データベースを使えないサーバを利用しております。 以上の条件でどうやったら解決できるのか、 お手数おかけいたしますが、教えていただければ幸いに思います。

  • 5day
  • お礼率100% (2/2)
  • PHP
  • 回答数2
  • ありがとう数2

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

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

<?php if(file_exists("background_img/backimg.txt")){ // ファイルの中身を配列で取得 $buff_array = array(); $buff_array = file("background_img/backimg.txt"); } // 末尾のデータのみほしい場合は配列の最後を取得 $buff = array_pop($buff_array); echo'<img src="'.$buff.'" border="0">'; ?> としては、いかがでしょうか?

5day
質問者

お礼

配列は考えたのですが、結局うまくできなかったので今の形(一行列を上書き)になった訳ですが…… 見ていて、なるほど!と思いました。 これなら今までUPしたファイルの形跡など、バックアップが残っていきますよね。勉強になりました。 もし同じような機会があれば、活用させていただきたいと思います。 ご回答ありがとうございました!

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

エラーの内容やPHPのバージョンも書いてもらえると回答しやすくなりますよ 推測ですがPHP4.1以前でしたらfgetsの引数が足りないので $buff = fgets($fp, 1024); のようにする必要があります。

5day
質問者

お礼

バージョンはご推測の通りPHP4.1以前でした。 Warning: Wrong parameter count for fgets() in …… 上記がエラー文になりますが、 後ろの 1024 を記述したら表示されるようになりました。 引数が足りない、というのが原因だったのですね。もっとちゃんと調べるべきでした。 御礼が遅くなりましたが、素早くご回答いただきありがとうございました。

関連するQ&A

  • 2つの画像ファイルが異なるファイルだと判定したい

    PHPを使って2つの画像ファイルが異なるファイルであることを判定するプログラムを考えています。以下のように、画像ファイルを文字列として扱い、md5ハッシュ値を取得し、それを比較することで、画像ファイルが違うということを判別しています。 こちらですが、もし他に良いロジックをご存知の方がいらっしゃいましたら、ご意見いただければと思います。 よろしくお願いいたします。 <?php $hash1 = getMD5('hoge1.jpg'); $hash2 = getMD5('hoge2.jpg'); if ($hash1 == $hash2) { echo "同じ画像ファイルです。"; } else { echo "同じ画像ファイルではありません。"; } // 画像ファイルを文字列として扱い、 // md5ハッシュ値を取得する関数 function getMD5($image) { $fp = fopen($image, 'r'); $str = ''; while(!feof($fp)) { # 画像ファイルを1行ずつ読み込んで、文字列にする $str .= fgets($fp); } fclose($fp); // $strのmd5ハッシュ値を得る return md5($str); } ?>

    • ベストアンサー
    • PHP
  • PHP外部ファイルの画像呼び出しについて

    PHPを使ってメニュー等の共通部分を一括管理しようとしたのですが、 index.phpは <?php require("top.txt"); ?> で上手くいったのですが、ひとつ下の階層のファイルでは <?php require("../top.txt"); ?> と記述したのですが、テキストだけ読み込んで画像は表示されませんでした。 階層が変わった場合はどうしてしたら良いか教えて下さい。 PHP初心者でエラートラブルに対処できなくて困ってます。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルアップ時のファイル名

    PHPで画像をアップロードしようとしています。 ファイル名を「000000_999999.jpg」というような感じにしたいです。 ファイル名の000000の部分は日付(080221等)が入ります。 999999の部分をどうしたら良いのか分かりません。 同時に5ファイルまでアップロードできるようなフォームになっています。 この場合で、絶対ダブらないようにするにはどのような値を使えば良いのでしょうか? 出来れば関数名も入れていただけると嬉しいです。 お願いいたします。

    • ベストアンサー
    • PHP
  • C++初心者です。ご指導よろしくお願いします。

    C++初心者です。ご指導よろしくお願いします。 C++で特定の行の値を読み込むプログラムを作っています。 a.txtとb.txtが入力ファイルで、c.txtが出力ファイルです。 a.txtには 237891 193203 1355876 ・ ・ ・ (以下1~5000000の数値がランダムに15000行分) b.txtには 0.333333 0.333333 0.397396 ・ ・ ・ (以下0.333333~0.822222までの数値がランダムに5000000行分) が書いてあって、 c.txtに a.txtの1行目の数値の行に対応するb.txtの値 a.txtの2~ a.txtの3~ ・ ・ ・ (以下15000行分) を出力するプログラムを作りたいと思っています。 以下のように、プログラムを書きましたが、a.txtが10行、b.txtが20行程度の時は問題なく動くのですが、行数が多くなると急に動かなくなります。 charのところを変えたり、offsetのところを変えたりしたのですが、最初の1行を読み込んだところで止まってしまいます。 (buffの値は=237891 no2の値は=237891まで) どのようにすれば動くようになるでしょうか? ご指導よろしくお願いします。 #include <stdio.h> #include <iostream> #include <fstream> #include <cstdlib> #include <cstring> using namespace std; int main(void) { FILE *fp,*fp2,*fp3; char buff[256],buff2[256]; long int offset[100],offset2[100]; long int max,max2; long int no=0; long int no2=0; for(no=1; no<=15000; no++){ fp = fopen("input/a.txt","r"); if(fp == NULL){ cout << "入力ファイルをオープンできません\n"; } for ( max = 0 ; !feof(fp) ; max++ ){ if ( max >= 100 ){ break; } offset[ max ] = ftell( fp ); fgets( buff, sizeof(buff), fp ); } fseek( fp, offset[no - 1], SEEK_SET ); fgets( buff, sizeof(buff), fp ); cout << "buffの値は=" << buff << "\n"; no2 = atoi(buff); cout << "no2の値は=" << no2 << "\n"; fp2 = fopen("input/b.txt","r"); if(fp2 == NULL){ cout << "入力ファイルをオープンできません\n"; } for ( max2 = 0 ; !feof(fp2) ; max2++ ){ if ( max2 >= 100 ){ break; } offset2[ max2 ] = ftell( fp2 ); fgets( buff2, sizeof(buff2), fp2 ); } fseek( fp2, offset2[no2 - 1], SEEK_SET ); fgets( buff2, sizeof(buff2), fp2 ); cout << "buff2の値は=" << buff2 << "\n"; fp3 = fopen("input/c.txt","a"); if(fp2 == NULL){ cout << "入力ファイルをオープンできません\n"; } fprintf(fp3, buff2); strcpy(buff,"0"); strcpy(buff2,"0"); no2=0; cout << "buff2は初期化されて=" << buff2 << "\n"; fclose(fp); fclose(fp2); fclose(fp3); } }

  • (javascript)HTMLで指定した画像パスに画像ファイルがない

    (javascript)HTMLで指定した画像パスに画像ファイルがない場合、別のファイル名の画像に差し替える方法が知りたいです。 以下のようにimgフォルダ内にある画像ファイル名をPHPでゲットしているのですが、その画像ファイルがない場合、確実にimgフォルダ内に存在する画像ファイルと差し替えたいのです。 print("<img src=img/". $item->getImage(). "border=0>\n"); <img src=img/cat.jpg border=0>が存在しないなら、<img src=img/dog.jpg border=0>を表示する。 javascript等、解決する方法がありますか? ご教授お願いします。 よろしくお願いします。<(_ _)>

  • フォルダ内のファイル名を取得、エラーになる原因は?

    指定したフォルダ内のファイル名を1つずつ取得するサンプルコードです。 function ForlderInImgGet() { CR = String.fromCharCode(13); folder = new Folder ("../img/"); files = folder.getFiles(); for (i=0; i<files.length; i++) { txt = txt + files[i].fullName + CR; } alert(txt); } 実行すると「Folder is not defined」というエラーになってしまいます。 画像ファイルは、 ルートディレクトリ\test\img\に01.jpg~10.jpgがあります。 jsファイルは、 ルートディレクトリ\test\js\に配置してあります。 一体なぜこのようなエラーが出てしまうのでしょうか。

  • fopenの使い方?(画像の保存)

    お世話になります。 exif_thumbnailで取得したサムネイル画像をjpgファイルとして元画像ファイルとは別名で保存したいと考えています。 テストで以下のようなコードを作成しましたが、うまく保存できません。fopenの基本的な使い方が間違っているのではないかと思っていますが、どこがおかしいのかわからずにおります。 <?php $img = exif_thumbnail("./test.jpg", $width, $height, $type); $handle = fopen ("./thumb.jpg", 'a'); fwrite($handle, $img); ?> ちなみにPHPのバージョンは5.0.3です。 echo($img);でサムネイル画像が取得できていることは確認できております。 要はtest.jpg → $img → thumb.jpgとできればいいのですが。。 どうしたらうまく保存できますでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • ファイルについて・・・。

    お願いいたします。 以下のソースは"samplefile.txt" が前提としてあることになって いますが、もしなかった場合このテキストファイルを作り出す仕組みをソースに加えたいんですが・・・。 2,3行目の間に「もしファイルがみあたらない時は・・」みたいな条件をつける??くらいしか自分の頭では思い浮かばず・・・ 何かアドバイスいただけないでしょうか??お願いいたします。 1 <?php 2 $fp = fopen("samplefile.txt", "a+"); 3 $count = fgets($fp, 15); 4 $count = $count++; 5 rewind($fp); 6 fputs($fp, $count); 7 fclose($fp); 8?> 9<p>あなたは <?php echo $count; ?> 人目のお客様です。

    • ベストアンサー
    • PHP
  • テキストファイルについて

    以前は、マップを作るときに下のようにしていたのですが char dungeon[5][5]={{0,0,0,1,1}, {1,1,0,1,1}, {1,0,0,0,1}, {1,1,0,1,1}, {1,1,0,0,0}}; for(i=0;i<5;i++){ for(j=0;j<5;j++){ else if(dungeon[i][j]==0)printf("+"); else printf("#"); } printf("\n"); } 最近、ファイルの入出力で読み込む事にチャレンジしています。 それで、メモ帳で書いたマップを使おうとしているのですが、 こんなのです。 1011111111111 1000000000001 1111111111101 1111100000001 1111100000001 1111100000001 1111100002001 1000000000001 1011111111111 fp = fopen("map.txt","r");の部分でテキストファイルを指定しますが、複数作った上のようなマップを切り替える時、どうすればいいんでしょうか? 質問が稚拙かもしれませんがよろしくお願いします。 #include <stdio.h> void map(void);//マップの表示関数の宣言 int main(){ map(); } void map(void));//マップの表示関数の定義 { FILE *fp; char str[1024];//これくらいでいいかな? //map.txtを読み込みモードで開く fp = fopen("map.txt","r"); //ファイルオープンに失敗したら if(fp==NULL){ //失敗を表示し終了 printf("ファイルのオープン失敗\n"); return -1; //exit;でもいいのかな? } //fgetsの戻り値がnullになるまで //strにファイルから内容を格納 while((fgets(str,256,fp))!=NULL){ //格納された文字を出力 printf("%s",str); } //ファイルを閉じる fclose(fp); }

  • 画像の表示で…

    htmlタグでの画像の表示は<IMG SRC="***">で出来ると思うのですが、 htmlで画像の表示をしようとするとエラーになってしまいます。 <IMG SRC="ファイル名.jpg">だと思うのですがどうすればいいのかわかりません。 いまデスクトップの新しいフォルダに「aa.jpg」というファイルがあります。 だから<IMG SRC="aa.jpg">としてみても、エラーになってしまいます。 当方は全くの初心者なんで… どうやったら画像を表示できるか教えてください。

    • ベストアンサー
    • HTML

専門家に質問してみよう