phpについて質問です。

わたしはphpのことは、ほとんど無知ですが、
やむを得ずやらなければいけない状況なので、力を貸してください。

あるWEBサイトの新着情報のページを制作していて、
1ページの中に、上から新しい順に記事を掲載したいと思っています。
各記事には画像と原稿があり、それぞれフォルダを作って入れています。

上から記事A、記事B、記事Cとした場合、
フォルダ内の更新日時が一番新しい画像をAに、二番目に新しい画像をBに、三番目に新しい画像をCに表示されるように、
phpで設定したいのですが、可能でしょうか?原稿も.txtファイルを同様に表示したいです。

どなたか力を貸してください!!

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/06/13 02:56:36
  • 終了:2010/06/13 23:35:12

ベストアンサー

id:koriki-kozou No.2

koriki-kozou回答回数480ベストアンサー獲得回数792010/06/13 06:09:11

ポイント50pt
<?php
    // 環境によって誤作動する場合があり、直接記述せずechoで出力
    echo '<?xml version="1.0" encoding="Shift_JIS"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
    <title>test</title>
</head>
<body>
    <?php
        $topicsDir = './'; // 記事フォルダ
        $imageDir  = './'; // 画像フォルダ
        exec('ls -t ' . $topicsDir . '*.txt' , $topics); // ls で更新日付降順でファイルリスト取得
        for($i = 0; $i < 3; $i++) {
            // 最新3回分ループ
            if(isset($topics[$i])) {
                // 記事があればイメージを探す
                $images = array(); // イメージ一覧クリア
                exec('ls -t ' . $imageDir . preg_replace('!.*/(.+)\.txt$!', '$1_*.jpg', $topics[$i]), $images); // イメージファイル一覧取得
                echo '<div id="topic' . $i . '">'; // divで囲んだけど、このあたりは適当に変えてもらってかまわない
                // 記事を読み込んでタグと認識されてしまいそうな<や>などもろもろを変換後、改行コードをbrタグに変換して出力
                echo preg_replace("/\r\n|\r|\n/", '<br />', htmlentities(file_get_contents($topics[$i]),ENT_COMPAT,'Shift_JIS')) . '<br />';
                // 画像を出力(無ければ何も出ない)
                foreach($images AS $img) {
                    echo '<img src="' . $img .'"/><br />';
                }
                echo '</div>'; // div で、以下同文
                echo "\n"; // 出来上がったHTMLのコードを見やすくするための改行コードだから本番ではなくてもいい
            } else {
                // 記事が無ければループ終了
                break;
            }
        }
    ?>
</body>
</html>

・記事テキスト作成時に文字コード問題がでるかもしれないので、とりあえずShift_JISを採用してますが好きに変えてください

・div で囲んでますけど textarea でも table でも好きな方法に変えてください

・画像ファイルのファイル名はコメント欄にも書きましたが「記事ファイル名_英数字,jpg 」にしてください

・画像ファイルの表示順を更新日ではなく英数字の部分でソートしたい場合は「ls -t 」ではなく「ls 」に変更してください

・phpのコマンドについては下記など(search for欄に入力して検索すればでてきます)で調べてください

  http://php.net/manual/ja/function.htmlentities.php

・lsコマンドはphpではなくunix系のコマンドです(Windowsに例えればDOSコマンドのDirに相当します)

・記事フォルダ/画像フォルダはそれぞれ適宜書き換えてください


まだまだ、つっこみどころ満載のコードなので、さらに「ここはこうしたほうがいい」という意見も待ってみるようにしてください

(くだらない回答も来る危険性はありますが、はてなの回答に保証はありませんので、自己判断してもらうしかないです)

id:helpme1111

ありがとうございます!!

// 環境によって誤作動する場合があり、直接記述せずechoで出力

echo '';

?>

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />

<title>test</title>

</head>

<body>

$topicsDir = 'text'; // 記事フォルダ

$imageDir = 'images'; // 画像フォルダ

exec('ls -t ' . $topicsDir . '*.txt' , $topics); // ls で更新日付降順でファイルリスト取得

for($i = 0; $i < 3; $i++) {

// 最新3回分ループ

if(isset($topics[$i])) {

// 記事があればイメージを探す

$images = array(); // イメージ一覧クリア

exec('ls -t ' . $imageDir . preg_replace('!.*/(.+)\.txt$!', '$1_*.jpg', $topics[$i]), $images); // イメージファイル一覧取得

echo '

'; // divで囲んだけど、このあたりは適当に変えてもらってかまわない

// 記事を読み込んでタグと認識されてしまいそうな<や>などもろもろを変換後、改行コードをbrタグに変換して出力

echo preg_replace("/\r\n|\r|\n/", '
', htmlentities(file_get_contents($topics[$i]),ENT_COMPAT,'Shift_JIS')) . '
';

// 画像を出力(無ければ何も出ない)

foreach($images AS $img) {

echo '
';

}

echo '

'; // div で、以下同文

echo "\n"; // 出来上がったHTMLのコードを見やすくするための改行コードだから本番ではなくてもいい

} else {

// 記事が無ければループ終了

break;

}

}

?>

</body>

</html>

↑このように、記事と画像のフォルダ名を書き換えて、

このphpと同じ階層にimagesフォルダとtextフォルダを作成して、

20100615.txtと20100615_01.jpgを入れてテストしてみたのですが、

わたしのやり方がおかしいのか、何も表示されませんでした。。。

もう少し格闘してみます。

2010/06/13 13:45:55

その他の回答(6件)

id:hanako393 No.1

hanako393回答回数1142ベストアンサー獲得回数872010/06/13 03:48:57

ポイント5pt

可能です

・ファイル一覧

http://www.project-nya.jp/modules/weblog/details.php?blog_id=380

・ファイルの更新日取得

http://blog.loaferz.com/?eid=226594

id:helpme1111

回答ありがとうございます。

すみません、一覧や更新日を表示させたいのではなく、

質問に書いた通り、更新日時が一番新しい順に、

画像ファイルやテキストファイルを表示させたいんです。

2010/06/13 03:54:54
id:koriki-kozou No.2

koriki-kozou回答回数480ベストアンサー獲得回数792010/06/13 06:09:11ここでベストアンサー

ポイント50pt
<?php
    // 環境によって誤作動する場合があり、直接記述せずechoで出力
    echo '<?xml version="1.0" encoding="Shift_JIS"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
    <title>test</title>
</head>
<body>
    <?php
        $topicsDir = './'; // 記事フォルダ
        $imageDir  = './'; // 画像フォルダ
        exec('ls -t ' . $topicsDir . '*.txt' , $topics); // ls で更新日付降順でファイルリスト取得
        for($i = 0; $i < 3; $i++) {
            // 最新3回分ループ
            if(isset($topics[$i])) {
                // 記事があればイメージを探す
                $images = array(); // イメージ一覧クリア
                exec('ls -t ' . $imageDir . preg_replace('!.*/(.+)\.txt$!', '$1_*.jpg', $topics[$i]), $images); // イメージファイル一覧取得
                echo '<div id="topic' . $i . '">'; // divで囲んだけど、このあたりは適当に変えてもらってかまわない
                // 記事を読み込んでタグと認識されてしまいそうな<や>などもろもろを変換後、改行コードをbrタグに変換して出力
                echo preg_replace("/\r\n|\r|\n/", '<br />', htmlentities(file_get_contents($topics[$i]),ENT_COMPAT,'Shift_JIS')) . '<br />';
                // 画像を出力(無ければ何も出ない)
                foreach($images AS $img) {
                    echo '<img src="' . $img .'"/><br />';
                }
                echo '</div>'; // div で、以下同文
                echo "\n"; // 出来上がったHTMLのコードを見やすくするための改行コードだから本番ではなくてもいい
            } else {
                // 記事が無ければループ終了
                break;
            }
        }
    ?>
</body>
</html>

・記事テキスト作成時に文字コード問題がでるかもしれないので、とりあえずShift_JISを採用してますが好きに変えてください

・div で囲んでますけど textarea でも table でも好きな方法に変えてください

・画像ファイルのファイル名はコメント欄にも書きましたが「記事ファイル名_英数字,jpg 」にしてください

・画像ファイルの表示順を更新日ではなく英数字の部分でソートしたい場合は「ls -t 」ではなく「ls 」に変更してください

・phpのコマンドについては下記など(search for欄に入力して検索すればでてきます)で調べてください

  http://php.net/manual/ja/function.htmlentities.php

・lsコマンドはphpではなくunix系のコマンドです(Windowsに例えればDOSコマンドのDirに相当します)

・記事フォルダ/画像フォルダはそれぞれ適宜書き換えてください


まだまだ、つっこみどころ満載のコードなので、さらに「ここはこうしたほうがいい」という意見も待ってみるようにしてください

(くだらない回答も来る危険性はありますが、はてなの回答に保証はありませんので、自己判断してもらうしかないです)

id:helpme1111

ありがとうございます!!

// 環境によって誤作動する場合があり、直接記述せずechoで出力

echo '';

?>

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />

<title>test</title>

</head>

<body>

$topicsDir = 'text'; // 記事フォルダ

$imageDir = 'images'; // 画像フォルダ

exec('ls -t ' . $topicsDir . '*.txt' , $topics); // ls で更新日付降順でファイルリスト取得

for($i = 0; $i < 3; $i++) {

// 最新3回分ループ

if(isset($topics[$i])) {

// 記事があればイメージを探す

$images = array(); // イメージ一覧クリア

exec('ls -t ' . $imageDir . preg_replace('!.*/(.+)\.txt$!', '$1_*.jpg', $topics[$i]), $images); // イメージファイル一覧取得

echo '

'; // divで囲んだけど、このあたりは適当に変えてもらってかまわない

// 記事を読み込んでタグと認識されてしまいそうな<や>などもろもろを変換後、改行コードをbrタグに変換して出力

echo preg_replace("/\r\n|\r|\n/", '
', htmlentities(file_get_contents($topics[$i]),ENT_COMPAT,'Shift_JIS')) . '
';

// 画像を出力(無ければ何も出ない)

foreach($images AS $img) {

echo '
';

}

echo '

'; // div で、以下同文

echo "\n"; // 出来上がったHTMLのコードを見やすくするための改行コードだから本番ではなくてもいい

} else {

// 記事が無ければループ終了

break;

}

}

?>

</body>

</html>

↑このように、記事と画像のフォルダ名を書き換えて、

このphpと同じ階層にimagesフォルダとtextフォルダを作成して、

20100615.txtと20100615_01.jpgを入れてテストしてみたのですが、

わたしのやり方がおかしいのか、何も表示されませんでした。。。

もう少し格闘してみます。

2010/06/13 13:45:55
id:yoneto164 No.3

ヨネちゃん回答回数813ベストアンサー獲得回数942010/06/13 07:06:34

ポイント20pt

例えば下記ソースのPHPファイルを設置したとします。

<html>
<head>
<title>NEWS</title>
</head>
<body>
<?php
$datadir = "data";
$dir = opendir($datadir);
while( $file = readdir( $dir ) ){
	$str = pathinfo($file);
	if ($str['extension'] == "txt"){
        $txtfiles[] = $file;
    }
	if ($str['extension'] == "jpg"){
        $jpgfiles[] = $file;
    }
}
closedir( $dir );
rsort($txtfiles);
rsort($jpgfiles);
echo "<p><img src=\"$datadir/$jpgfiles[0]\">"."<br />\n";
echo file_get_contents($datadir."/".$txtfiles[0])."</p>\n";
echo "<p><img src=\"$datadir/$jpgfiles[1]\">"."<br />\n";
echo file_get_contents($datadir."/".$txtfiles[1])."</p>\n";
echo "<p><img src=\"$datadir/$jpgfiles[2]\">"."<br />\n";
echo file_get_contents($datadir."/".$txtfiles[2])."</p>\n";
?>
</body>
</html>

同じフォルダ内に「data」というフォルダを置き、

その中にjpgファイルとtxtファイルをアップすると、

最後にアップされたファイルから順に3つ表示されます。


サンプル

http://vp.cool-music.org/test/news/

id:helpme1111

ありがとうございます!

このやり方だと、1つの記事に対して、画像が2つある場合はどうなりますでしょうか?

2010/06/13 14:11:27
id:koriki_kozou No.4

小力子象回答回数78ベストアンサー獲得回数22010/06/13 12:52:43

修正ソース

<?php
    // 環境によって誤作動する場合があり、直接記述せずechoで出力
    echo '<?xml version="1.0" encoding="Shift_JIS"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
    <title>test</title>
</head>
<body>
    <?php
        $topicsDir = './'; // 記事フォルダ
        $imageDir  = './'; // 画像フォルダ
        exec('ls -t ' . $topicsDir . '*.txt' , $topics); // ls で更新日付降順でファイルリスト取得
        for($i = 0; $i < 3; $i++) {
            // 最新3回分ループ
            if(isset($topics[$i])) {
                // 記事があればイメージを探す
                $images = array(); // イメージ一覧クリア
                exec('ls -t ' . $imageDir . preg_replace('!.*/(.+)\.txt$!', '$1_*.jpg', $topics[$i]), $images); // イメージファイル一覧取得
                echo '<div id="topic' . $i . '">'; // divで囲んだけど、このあたりは適当に変えてもらってかまわない
                // 記事を読み込んでタグと認識されてしまいそうな<や>などもろもろを変換後、改行コードをbrタグに変換して出力
                echo preg_replace("/\r\n|\r|\n/", '<br />', htmlentities(file_get_contents($topics[$i]),ENT_COMPAT,'Shift_JIS')) . '<br />';
                // 画像を出力(無ければ何も出ない)
                foreach($images AS $img) {
                    echo '<img src="' . $img .'"/><br />';
                }
                echo '</div>'; // div で、以下同文
                echo "\n"; // 出来上がったHTMLのコードを見やすくするための改行コードだから本番ではなくてもいい
            } else {
                // 記事が無ければループ終了
                break;
            }
        }
    ?>
</body>
</html>
id:helpme1111

ありがとうございます!

なぜだか文字化けしてしまいます。。。

UTF-8に変えても、ダメでした。。。

2010/06/13 14:36:05
id:koriki-kozou No.5

koriki-kozou回答回数480ベストアンサー獲得回数792010/06/13 16:18:38

ポイント50pt

(1)文字化け

テキストファイルの保存形式をShift_JISと想定してますので、XHTMLのほうをutf8にしてしまうと文字化けします

XHTMLのほうをutf-8に変えたのであれば、テキストファイルもutf-8で保存するか、もしくはプログラムのほうで変換してやります

テキストファイルはShift_JISで、XHTMLはUTF-8にしたい場合の変更は下記のような具合

echo preg_replace("/\r\n|\r|\n/", '<br />', mb_convert_encoding( htmlentities( file_get_contents($topics[$i]), ENT_QUOTES, 'Shift_JIS'), 'UTF-8', 'auto')) . '<br />';

利用できる文字コードについては下記にあります

http://jp.php.net/manual/ja/mbstring.supported-encodings.php

文字コードを混在させると面倒なのでXHTML本体もShift_JISにしてあったこと理解いただけたと思います

(2)文字化け、その2

ENT_COMPAT を使ってしまっていたので ENT_QUOTES に変えてます

詳細は下記

http://jp2.php.net/manual/ja/function.htmlentities.php

id:helpme1111

ありがとうございます!!

文字化け解消されました。嬉しいです。

が。。。今更な問題に気づいてしまいました。

記事の日付とタイトルをトップページに3件だけ表示したいので、

topics_list.txtを作成して、

2010.6.15

ああああああああああああああああああああああああああ

2010.6.15

ああああああああああああああああああああああああああ

2010.6.15

ああああああああああああああああああああああああああ

↑こういう内容にして、

トップページは問題なく3件だけ反映できているのですが、

新着情報ページにもtopics_list.txtの内容(上から新しい順)を、

各記事に反映させることってできるんでしょうか?

ちなみに、トップページは、

こんな感じで反映させています(これも検索してコピペしただけなんですが)。

意味不明だったら、ごめんなさい。。。

2010/06/13 16:51:34
id:yoneto164 No.6

ヨネちゃん回答回数813ベストアンサー獲得回数942010/06/13 17:07:47

ポイント10pt

1つの記事に対して複数の画像を掲載する場合、

それらの画像を結合して1つの画像ファイルにしてからアップロードしてもらうことは不可能でしょうか?

id:helpme1111

なるほど!勉強になります。

それは不可能ではないですが、画像を結合する作業が発生してしまうので、

今後更新作業をする人にとっては、ちょっと手間かなと思います。

わたし的には、今後更新する人が、WEBの知識がない方なので、

できるだけシンプルな作業で更新できる仕組みにすることを最優先に考えています。

2010/06/13 17:18:40
id:koriki-kozou No.7

koriki-kozou回答回数480ベストアンサー獲得回数792010/06/13 19:11:02

ポイント50pt

(1)ファイルの先頭行をヘッドラインとして抜き出して別途で表示できるようにしたもの

デザインしやすいように記事や画像ファイルの取得と表示を分けた

記事フォルダと画像フォルダはこれまでと同じように、そちらの状況にあわせる必要あり

<?php
    // 環境によって誤作動する場合があり、直接記述せずechoで出力
    echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>test</title>
    <style>
        span.title { font-size:large; color:red }
    </style>
</head>
<body>
    <?php
        $topicsDir = './'; // 記事フォルダ--前回までと同様に調整必要
        $imageDir  = './'; // 画像フォルダ--前回までと同様に調整必要
        $headline = array('', '', ''); // ヘッドラインを一時保管するための変数を用意
        $body = array('', '', '');     // 本文を一時保管するための変数を用意
        $imageURL = array('', '', ''); // イメージのURLを一時保管するための変数を用意
        exec("ls -tlG --time-style=+':%Y.%m.%d' " . $topicsDir . '*.txt' , $topics); // ls で更新日付降順でファイルリスト取得
        // echo '<pre>'; print_r($topics); echo '</pre>'; exit; // 不具合発生時の動作テスト時に利用(1)
        for($i = 0; $i < 3; $i++) {
            // 最新3回分ループ
            if(isset($topics[$i])) {
                if (preg_match('!:(.+)\s(.*/(.+)\.(.+))$!' ,$topics[$i], $match)) {
                    // echo '<pre>'; print_r($match); echo '</pre>'; exit; // 不具合発生時の動作テスト時に利用(2)
                    // 記事があればイメージを探す
                    $images = array(); // イメージ一覧クリア
                    // echo 'ls -t ' . $imageDir . $match[3] . '_*.jpg' . '<br />'; exit; // 不具合発生時の動作テスト時に利用(3)
                    exec('ls -t ' . $imageDir . $match[3] . '_*.jpg', $images); // イメージファイル一覧取得
                    // 記事を読み込む(タグと認識されてしまいそうな<や>などもろもろを変換後、改行コードをbrタグに変換後、最初の改行までをヘッドライン用に分離)
                    list($headline[$i], $body[$i]) = split('<br />', preg_replace("/\r\n|\r|\n/", '<br />', mb_convert_encoding( htmlentities( file_get_contents($match[2]), ENT_QUOTES, 'SJIS'), 'UTF-8', 'auto')) . '<br />', 2);
                    // ヘッドラインに日時追加
                    $headline[$i] = $match[1] . '<br />' . $headline[$i];
                    // 画像を出力(無ければ何も出ない)
                    foreach($images AS $img) {
                        $imageURL[$i] .= '<img src="' . $img .'"/><br />';
                    }
                }
            } else {
                // 記事が無ければループ終了
                break;
            }
        }
    ?>
    <div id="headline">最新記事<br /><span class="title"><?php echo $headline[0] . '<br />' . $headline[1] . '<br />' . $headline[2] . '<br />'; ?></span></div>
    <hr />
    <div id="topics">
        <div id="topic1"><?php echo $headline[0] . '<br />' . $body[0] . '<br />' . $imageURL[0]; ?></div>
        <div id="topic2"><?php echo $headline[1] . '<br />' . $body[1] . '<br />' . $imageURL[1]; ?></div>
        <div id="topic3"><?php echo $headline[2] . '<br />' . $body[2] . '<br />' . $imageURL[2]; ?></div>
    </div>
</body>
</html>

(2)ヘッドラインだけを表示するもの

上記から不要な行を取り除いたものをトップページに埋め込めばいいようにしてある

<?php
    echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>test</title>
    <style>
        span.title { font-size:large; color:red }
    </style>
</head>
<body>
    <?php
        $topicsDir = './';
        $headline = array('', '', '');
        $body = array('', '', '');
        exec("ls -tlG --time-style=+':%Y.%m.%d' " . $topicsDir . '*.txt' , $topics);
        for($i = 0; $i < 3; $i++) {
            if(isset($topics[$i])) {
                if (preg_match('!:(.+)\s(.*/(.+)\.(.+))$!' ,$topics[$i], $match)) {
                    list($headline[$i], $body[$i]) = split('<br />', preg_replace("/\r\n|\r|\n/", '<br />', mb_convert_encoding( htmlentities( file_get_contents($match[2]), ENT_QUOTES, 'SJIS'), 'UTF-8', 'auto')) . '<br />', 2);
                    $headline[$i] = $match[1] . '<br />' . $headline[$i];
                }
            } else {
                break;
            }
        }
    ?>
    <div id="headline">最新記事<br /><span class="title"><?php echo $headline[0] . '<br />' . $headline[1] . '<br />' . $headline[2] . '<br />'; ?></span></div>
</body>
</html>

欲を言えばphpの本体部分だけを別ファイルにして使いまわししやすくしたり、cssファイルも別にして、などと言いたくなるけど、ほんとに限がないので、ここまでの分で完成を目指してもらえればと思います

id:helpme1111

了解しました!

本当にありがとうございます!!

koriki-kozou さんのおかげで、かなり理想の形に近づきました。

本当に本当に助かりました。ありがとうございました。

このソースでがんばってみます!!

2010/06/13 22:12:21
  • id:koriki-kozou
    koriki-kozou 2010/06/13 03:09:30
    更新日時順に並べるなどは簡単だけど、記事Aと画像Aがほんとに正しい組み合わせなのかどうかについては、どのように考えてるの?
    もし、どちらかのファイルが抜けてたりアクセスできなかったりしたら、ズレてしまうよ。

    プログラムを簡単にする意味でも、表示を確実にする意味でも、記事Aのファイル名と、対応する画像のファイル名を記述したテキストファイルを別途で用意しておいて、それに従って表示するようにしたほうが確実だけど、仕様の見直しはできないの?

    phpは無理でも、他にプログラム言語つかったことあったら、それを例にして説明することもできるから、書いておいても損はないと思うけど、ファイル名やフォルダ名についても、そのままが無理でも、自分の都合のいいように決めてしまってもらったほうが、サンプル作るにしても楽になるから、あわせて考えてみて
  • id:helpme1111
    >koriki-kozouさん

    コメントありがとうございます。すごく嬉しいです!

    >>更新日時順に並べるなどは簡単だけど、記事Aと画像Aがほんとに正しい組み合わせなのかどうかについては、どのように考えてるの?
    >>もし、どちらかのファイルが抜けてたりアクセスできなかったりしたら、ズレてしまうよ。

    たしかに、そうですね。。。そこまで考えてませんでした。

    >>プログラムを簡単にする意味でも、表示を確実にする意味でも、記事Aのファイル名と、
    >>対応する画像のファイル名を記述したテキストファイルを別途で用意しておいて、それに従って表示するようにしたほうが確実だけど、
    >>仕様の見直しはできないの?

    つまり、ABCの記事それぞれのhtmlファイルを作成して、その中にそれぞれのphp設定をして、
    それらのhtmlファイルを新着情報ページに出力するということでしょうか?
    仕様の見直しは今からでも可能です。明日中に対応できる範囲でですが。。(汗)

    >>phpは無理でも、他にプログラム言語つかったことあったら、それを例にして説明することもできるから、
    >>書いておいても損はないと思うけど、ファイル名やフォルダ名についても、そのままが無理でも、
    >>自分の都合のいいように決めてしまってもらったほうが、サンプル作るにしても楽になるから、あわせて考えてみて

    xhtmlやcssは基本的に理解していますが、プログラム言語はさっぱりわかりません。。。
    ファイル名などに関しては、わたしの自由に決められます。

  • id:helpme1111
    補足しますと、なぜこういう作りにしたかというと、
    今後そのページの更新をする方が、
    WEBの知識がない方なので、単純に画像ファイルとテキストファイルを、
    それぞれのフォルダにアップロードするだけで、
    新着情報のページに反映されれば、その方も楽だろうと思って、
    わたしが考えたんです。。。
  • id:koriki-kozou
    koriki-kozou 2010/06/13 03:51:56
    >ABCの記事それぞれのhtmlファイルを作成して、その中にそれぞれのphp設定をして、
    >それらのhtmlファイルを新着情報ページに出力するということでしょうか?

    ちがうよ
    記事フォルダには記事A(今日の日付)、記事B(昨日)、記事C(一昨日)・・・と、複数のテキストファイルが入ってて
    画像フォルダには画像X(今日の日付)、画像Y(昨日)、画像Z(一昨日)・・・が入ってるという状況でいいんだけど、
    たとえば、
    「最新記事一覧」という名前のテキストファイルに、記事Aと画像Xがペア、記事Bと画像Yがペアと書いておくようにする
    phpスクリプトは「最新記事一覧」をまずは読み込んで、そこに記載されているペアを読み込むようにする
    という流れ

    最新の記事表示がほしいなら、記事や画像のファイルアップロードもphp経由で行うようにして、
    記事と画像の投稿日時を記録させたりするんだけど、
    そうなるとサイト運営まで少し変わってくるから明日一日って制限じゃ無理だよね
    さきほどコメントしたようなズレを無視して、あとで作ってみようか?
    (ズレた場合に、クレーム覚悟の仕組みだから、商売で受けた仕事だとお勧めできないけどね)
  • id:koriki-kozou
    koriki-kozou 2010/06/13 04:04:36
    >WEBの知識がない方なので、単純に画像ファイルとテキストファイルを、
    >それぞれのフォルダにアップロードするだけ

    ちょっと応答がズレちゃいましたね
    単純に記事を投稿したいということですね。

    いっそのことブログを採用してしまってcssで体裁整えるほうが得意な分野が生かせるのでは?
    WEBサイトを運用してるサーバにはブログシステム無いの?
  • id:helpme1111
    >koriki-kozouさん

    早速のお返事、ありがとうございます!

    なるほど。そのほうが確実ですよね。
    でも、時間がかかるのですね。。。
    もっと早くここで質問すればよかったと後悔しています(涙)

    ズレが生じないようにするには、
    必ず記事と画像の更新日時を一緒にして、
    アップロードするということを気をつければいいんですよね?

    ちなみにこの場合、画像が一つの時もあれば二つの時もある、
    ということになると、困ったことになっちゃうでしょうか。

    ちなみに、自分で検索とかして試行錯誤して(ただのコピペですが)、

    <?php exec ('ls -t -1 topics/images/*.jpg', $output);print "<img src=$output[0]>";?>

    ↑これを入れて、
    記事Aに一番新しいのは表示できたんですが、
    記事Bに二番目、記事Cに三番目のはどうやって指定したらいいか、わからず。。。

  • id:helpme1111
    >koriki-kozouさん

    すみません!お返事書いてる間に、また入れ違いになってしまいました。

    >>ちょっと応答がズレちゃいましたね
    >>単純に記事を投稿したいということですね。

    >>いっそのことブログを採用してしまってcssで体裁整えるほうが得意な分野が生かせるのでは?
    >>WEBサイトを運用してるサーバにはブログシステム無いの?

    わたしもそう思ったんですが、ブログは別にあって、
    新着情報のページはサイトのデザインと統一したいから、ということで、
    こういうことになってしまいました。

    サーバーにはブログシステムはないみたいです。
  • id:koriki-kozou
    koriki-kozou 2010/06/13 04:13:17
    >画像が一つの時もあれば二つの時もある、
    >ということになると、困ったことになっちゃうでしょうか。

    結びつけるための規則性が必要だよね
    記事は多分1つだろうから、記事のファイル名が「記事A.txt」だとして、画像1は「記事A_1.jpg」、画像2は「記事A_2.gif」、画像3は・・・といったような工夫は必要だろうね

    execなどが使えるサーバならシステムコマンド(例にならえばls)の結果を一度変数に取り込んで、並び替えるという手が使えるよ
    最新記事を取得したならば、次には命名規則で示したようなファイルだけを対象にしてlsコマンドを投げてやれば、必要な画像ファイルの一覧が手に入るという流れ
  • id:helpme1111
    >koriki-kozou さん

    お返事ありがとうございます。
    眠くないでしょうか?大丈夫ですか?

    >>結びつけるための規則性が必要だよね
    >>記事は多分1つだろうから、記事のファイル名が「記事A.txt」だとして、画像1は「記事A_1.jpg」、画像2は「記事A_2.gif」、
    >>画像3は・・・といったような工夫は必要だろうね

    そうですね、このへんまでは理解できました。

    >>execなどが使えるサーバならシステムコマンド(例にならえばls)の結果を一度変数に取り込んで、並び替えるという手が使えるよ
    >>最新記事を取得したならば、次には命名規則で示したようなファイルだけを対象にしてlsコマンドを投げてやれば、
    >>必要な画像ファイルの一覧が手に入るという流れ

    ・・・・・すみません、このへんから頭がフリーズしてしまいました。
    なんだかとても難しそうです。
  • id:koriki-kozou
    koriki-kozou 2010/06/13 04:25:33
    コメント欄ばかりみてるまに、ふざけた回答者が投稿してきてたんだね。 確かに、少し注意力散漫になってるって事だよねw
    (過去の回答みれば、いいかげんさがわかると思うよ。不適切な回答者欄にチェックいれといてもいいくらい)

    きっちり作ろうとすると限が無いし、時間も無いようなので、ファイル名のつけ方を決めておくという前提で、少し休んでから、lsコマンド使う方向でサンプル投稿しますね。
    (数行なんだけど、なんかミスしそうな気がするので、ひとまずおきます)
  • id:helpme1111
    >koriki-kozou さん

    >>きっちり作ろうとすると限が無いし、時間も無いようなので、ファイル名のつけ方を決めておくという前提で、少し休んでから、
    >>lsコマンド使う方向でサンプル投稿しますね。
    >>(数行なんだけど、なんかミスしそうな気がするので、ひとまずおきます)

    ありがとうございます!!
    あぁ、すごくホッとしました。質問して良かったです。

    ずっと、この問題と格闘していて、
    安心して眠れなかったので、やっと少し休めそうです。

    心から感謝します。koriki-kozou さんもゆっくり休んでください。
  • id:koriki-kozou
    koriki-kozou 2010/06/13 06:13:19
    急場で簡単なテストしかしてませんが、一応動くものをアップしておきました。
    では、ひと寝入りしてきます

    私のIDやアイコンを真似たヤツもいるので、注意してくださいね
    (IDの一部が大文字だったり、ハイフンがアンダーバーだったりしてます)
  • id:koriki_kozou
    小力子象 2010/06/13 12:53:00
    少し間違いがあったので、修正したものを回答しました。
  • id:helpme1111
    >koriki-kozou さん

    ありがとうございます。

    上の回答のところにも書いたんですが、
    コピペしてフォルダ名だけ書き換えたんですが、
    なにも表示されませんでした。。。

    わたしが何か間違えてると思うので、考えてみます。
  • id:helpme1111
    >koriki-kozou さん

    お返事のところに、コピペしたソースが、
    うまくペーストされてないみたいでした。。
    混乱させていたら、すみません。
    実際にテストしたソースは、そのままコピペしています。
  • id:helpme1111
    >koriki-kozou さん

    フォルダの指定のところが間違ってました(汗)

    $topicsDir = 'text/'; // 記事フォルダ
    $imageDir = 'images/'; // 画像フォルダ

    ↑これにしたらデータは取得できました。
    しかし、テキストが文字化けしてしまって、そこでつまづいています。。。

    <?php
    // 環境によって誤作動する場合があり、直接記述せずechoで出力
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>test</title>
    </head>

    ↑こう書いてるんですが。。。
  • id:koriki-kozou
    koriki-kozou 2010/06/13 16:22:11
    (1)回答4は偽者ですハイフンではなくアンダーバーになってます
    確認の手間をかけさせるのが狙いのいたずらですから、不適切な回答者欄にチェックを入れておいてください。

    (2)回答3はファイル読み込みだけを書いているようです
    コメント欄を読んでいないようですし、文字コードやテキスト中にタグが入ってしまっている場合などに関してまったく配慮がありませんが、lsコマンドのようなシステムコマンドを使えない場合(使えない環境のほうが多分、多い)のため、そのためのフォローとしてメモしておくと後々、役に立ってくるでしょう 有益な回答です
  • id:helpme1111
    >koriki-kozou さん

    またまた、ありがとうございます!
    (1)、そうなんですね。早速だまされてしまいました。。。
    教えてくださって、ありがとうございます。

    回答5への返信で、「こんな感じで反映させています」の上に、
    ペーストしたコードが表示されていなかったので、ここに記します。

    <dt><?php $n = 1;$file = @file("topics/topics_list.txt");$i = 0;while( $i < $n ){echo "$file[$i]"; $i++; }?></dt>
    <dd><a href="topics/index.php"><?php $n = 2;$file = @file("topics/topics_list.txt");$i = 1;while( $i < $n ){echo "$file[$i]"; $i++; }?></a></dd>
  • id:koriki-kozou
    koriki-kozou 2010/06/13 17:15:27
    完成間際の追加はつらいですねw
    (3)最新記事の日付一覧のテキストファイルを用意する場合
    topics/topics_list.txt を作ったのであれば回答5の(1)の式を応用すれば1行で書けます
    echo preg_replace("/\r\n|\r|\n/", '<br />', mb_convert_encoding( htmlentities( file_get_contents('topics/topics_list.txt'), ENT_QUOTES, 'SJIS'), 'UTF-8', 'auto')) . '<br />';

    (4)最新記事の日付を自動的に取得することも可能ですが、いま忙しいので、それはまた後刻
  • id:koriki-kozou
    koriki-kozou 2010/06/13 17:28:46
    ごめん。
    >各記事に反映
    を見逃してた。1行じゃ無理だね。見直しに含んでおくけど、

    topics/topics_list.txt を用意するくらいなら、最初から各記事の最初の一行をタイトルにしておけばいいんじゃない?
    一番最初のコメントに書いたズレの問題点が、ここでも出てくるんだけど、ファイルの更新具合によってはtopics/topics_list.txtと違うものが表示されてしまう可能性があるんだよね

    もう少し、仕様を考え直してみて
  • id:helpme1111
    >koriki-kozou さん

    忙しいところ、お返事ありがとうございます!
    だんだん理想の形に近づいてきました!!

    (3)を追加してみたところ、
    日付とタイトルは表示されたんですが、
    topics/topics_list.txtの内容すべて(3件分)が、
    各記事に表示されてしまいました。。。
    記事Aには、topics/topics_list.txtの一行目から二行目を表示、
    記事Bには、topics/topics_list.txtの二行目から三行目を表示、
    というような指定はできないのでしょうか?

    自分でもがんばって調べてみます!
  • id:helpme1111
    >koriki-kozou さん

    すみません、またすれ違いになってしまいました。

    >>topics/topics_list.txt を用意するくらいなら、最初から各記事の最初の一行をタイトルにしておけばいいんじゃない?

    わたしもそれを一度考えてみたのですが、
    記事のtxtファイルに日付とタイトルを含めてしまうと、
    日付とタイトルのフォントサイズだけ大きくすることってできませんよね?


  • id:edWard
    http://q.hatena.ne.jp/1276365392#c180043
    回答者や運営者でもないのに他者の回答を評価することは、あらたな紛争の火種になりかねませんよ。
  • id:koriki-kozou
    koriki-kozou 2010/06/13 18:06:50
    >日付とタイトルのフォントサイズだけ大きくすることってできませんよね?

    出来ますよ
  • id:helpme1111
    >koriki-kozou さん

    できるんですね!すごい!!
    でわ、その方法が一番簡単ですよね。

    いま、見映えを整えていたのですが、
    phpの?>の下がなぜか右にずれてしまって、
    血眼になって原因を究明しています(汗)
  • id:helpme1111
    >koriki-kozou さん

    >>いま、見映えを整えていたのですが、
    >>phpの?>の下がなぜか右にずれてしまって、
    >>血眼になって原因を究明しています(汗)

    ↑これ、いろいろいじってたら解決しました。
    取り急ぎ、ご報告まで。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません