質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.11%

PHPのランダム画像が表示されません

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 236

Kitami

score 11

https://webnetamemo.com/coding/php/201608313448
このサイトを参考に、ランダムで一枚だけ表示されるコードを書いていて、仮想(AtomIDE)で見ると上手く行っているぽいのですが、サーバー(ロリポップ)のサイトで見ると表示されない状態です。

<?php
  $image_rand=array(
    "img/img_6521.png",
    "img/img_6522.png",
    "img/img_6524.png",
    "img/img_6525.png",
    "img/img_6526.png",
    "img/img_6527.png",
  );
  $image_rand=$image_rand[mt_rand(0,count($image_rand)-1)];
  echo '<img src=".$image_rand."alt="">'; 
  ?>

チェックしたのは
・画像ファイルの階層と指定(置き場所)
・ファイル名ミス(大文字小文字など)
・サーバーにアップロードしたか
で、それらは問題なしでした。

仮想では

<img src=".$image_rand."alt="">


と(たぶん)ちゃんとHTML化されています。
どうしたらサイトに画像を表示できますか?
コード内どこかで間違えているところがあったら教えていただきたいです

追記:
jpg階層
画像で載せたんですが、HTMLのファイルと画像は同階層になっていますか?(私の思っていたのと違うかもしれないので確認していただけると助かります)
あと、ブラウザで確認したソースでは画像部分が

<img src="$image_rand."alt="">    


になっていました。この時点で$image_rand.ではなくファイル名(img_6521.pngなど)が指定されていないとダメということでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kitami

    2019/02/11 16:56 編集

    php-serverでひらいてみたところ、うまくいきました!なのでロリポップサーバーへのアップロード関連がうまく行ってないんだとわかりました。色々チェックし直して見ます。
    ありがとうございます!

    キャンセル

  • gouf

    2019/02/11 16:59

    1歩前進ですね。状況をまとめた自己回答をベストアンサーに設定して、また改めて質問してみると良いかもしれません

    キャンセル

  • Kitami

    2019/02/11 17:06

    嬉しいです!
    確かに、状況まとめた方が良いですね。ついさっきベストアンサーを設定しましたが、後からでも自己回答はできるみたいなのでやってみます!

    キャンセル

回答 3

checkベストアンサー

+2

<?php

  $image_array = array(
    "img/img_6521.png",
    "img/img_6522.png",
    "img/img_6524.png",
    "img/img_6525.png",
    "img/img_6526.png",
    "img/img_6527.png",
  );
  $image_rand = $image_array[mt_rand(0,count($image_array)-1)];
  echo '<img src="'.$image_rand.'" alt="">';

で動作確認できてる。

ちゃんと動かないとしたら、編集中phpファイルを保存し忘れていないかとか、
アップロードし忘れていないかとか、
基本的なところを点検するべし。

個人的には、
配列データだったところに突然配列じゃないデータが入るのは気持ち悪いので、
あえて別の変数名を使うようにした。
代入演算子「=」の前後に空白を挿入して見やすくしたりもした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/11 16:37

    ありがとうございます。
    コピペしてやって見たところ、仮想では
    <img src="img/img_6522.png" alt="">
    という感じでちゃんとランダム表示されるようになりました!
    サーバーで見るとまだ表示されないのでコード以外をもう一度チェックして見ます

    キャンセル

+1

とりあえず。

// echo '<img src=".$image_rand."alt="">';
//                 ↓            ↓
   echo '<img src="'.$image_rand.'"alt="">';

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/11 16:25

    echo '<img src="'’.$image_rand.'’"alt="">';

    echo '<img src="'.$image_rand.'"alt="">';
    に直しました!が変化なしで表示されませんでした…

    キャンセル

  • 2019/02/11 17:03

    出力されたHTML(ブラウザで「ページのソースを表示」)で確認してください。
    表示されるかどうかの前に、HTMLとして正しい物が出ているかどうかが先です。

    正しくHTMLが出力されているならば、パスの問題か、画像がパスから探せない状態かどちらかだと思います。

    キャンセル

  • 2019/02/11 17:33

    atomの仮想、ローカルサーバー、ロリポップサーバー共にHTMLは正しく出力されるようになったので、最終的に画像それぞれの階層をHTMLと同じにしてアップロードし直したところ、万事うまくいきました!
    本当にありがとうございます

    キャンセル

+1

まとめメモです
kei344さん、m6uさん、goufさん、3人のすごい方々に助けていただきました。
本当にありがとうございました!


1:画像の状態から

 $image_rand = $image_array[mt_rand(0,count($image_array)-1)];
  echo '<img src="'.$image_rand.'" alt="">';


に変更。
(・ここで’’の打ちミス直しと

$image_rand=$image_rand
↓
$image_rand=$image_array


に変更している)

結果↓
出力が

<img src="$image_rand."alt="">
から
<img src="img/img_6522.png" alt="">


と、ちゃんとランダム出力されるようになる。(仮想・ローカル・ロリポップサーバー全て)

2:(ここでAtom php-serverを導入して仮想とローカルサーバーでは表示も出来ていることを確認)

3:ロリポップサーバーの画像表示のみ、上手くいかないのでアップロードやパス、フォルダの階層に問題があるとわかる。

4:アップロードがファイルごとでなく画像毎にやっているのでファイルの階層がローカルとロリポップサーバーの方で違ってしまって表示されないのでは?と推測。
ファイルごとアップロードする方法が見つからなかったので画像それぞれをHTMLと同じ階層に移してアップロードし直す
(これは画像ファイルが増えてきたら見づらいので、まとめたフォルダに入れたまま上手くアップロードする方法を探したいと思います)
→3/13追記:ロリポップアップロードページにて、「新規ファイル」を作成すると、その中に階層分けして画像をアップロードできました。(なのでファイル内で画像とテキストファイルが混在することなく見易くなりました)


5:ロリポップサーバーでも表示成功!いえーい

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる