1

セッションを使用して画像のフォルダー構造を保存する小さな PHP スクリプトを作成しようとしています。サイドが呼び出されるたびに、セッション リストから次の画像が読み込まれ、サイドのコンテンツ タイプとして表示されます。スクリプトを呼び出すと、リストから次の画像ではなく、次の画像が取得されることがあります。すべてのページ要求を登録する出力ファイルを作成すると、複数の要求があったことがわかります。しかし、火災バグのタイムラインを見ると、複数のリクエストが表示されず、JavaScript が実行されていません。通常の HTML ページの一部として画像を表示すると、すべてうまくいきます。ここで何が起こっているのでしょうか。

誰かがこれで私を助けてくれればいいのですが...

<?php
include("readDir.class.php");

define("IMAGE_SOURCE_PATH","img");

session_start();

//Inititalize new session context
try
{
    if(!isset($_SESSION['id']))
        initSessionConext();
}
catch (Exception $e) 
{
    exit();
}

$fotos = $_SESSION['fotos'];

//Handle wrapp around
try
{
    if($_SESSION['id'] >= count($fotos))
        initSessionConext();
}
catch (Exception $e) 
{
    exit();
}
$foto = $fotos[$_SESSION['id']];
if(strcasecmp($_SERVER['REQUEST_METHOD'],"get") == 0)
     $_SESSION['id'] += 1;

//Error in session context return nothing
if(empty($foto))
    exit(); //

switch(readDir::extension($foto))
{
    case "png":
        header('Content-Type: image/png');
        break;
    case "jpg": //Fall through to jpeg case
    case "jpeg":
        header('Content-Type: image/jpeg');
        break;
}

$fp = fopen("test.txt","a");
fwrite($fp,$foto."\r\n");
fclose($fp);

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
readfile(IMAGE_SOURCE_PATH."/".$foto);

//echo $foto."<br>";
//echo '<img src="'.IMAGE_SOURCE_PATH."/".$foto.'" />';

//--------------- F U N C T I O N S -------------------------------

function initSessionConext()
{
    $_SESSION['id'] = 0;
    $_SESSION['fotos'] = getNewData(IMAGE_SOURCE_PATH);
}

function getNewData($path)
{
    $extensions = array("jpg","png","jpeg");        //get data out of file system
    $fotos = array();
    $source = new readDir($path);
    if(!$source->check())
         throw new Exception('Could not find source for given path');
    $fotos = $source -> readFilesWithextension($extensions);
    if(!sort($fotos,SORT_STRING))
         throw new Exception('Could not sort foto list in natural order');
    return $fotos;
}
?> 
4

2 に答える 2

2

私の理解が正しければ、画像が読み込まれるたびに 1 つずつ、各画像を返していますか?

ブラウザーが画像を 2 回要求しているように思えます。1 回目は HEAD 要求として、2 回目はコンテンツを取得するためです。これは、Content-Lengthやみくもにダウンロードする前にヘッダーなどを見つけるためによく使用されます。

strcasecmp($_SERVER['REQUEST_METHOD'],"get") == 0セッションを変更する前に確認することをお勧めします。

于 2012-12-22T23:52:00.790 に答える
0

少なくともリクエストの問題は解決しませんでした。現在の時差を使用して、リクエストを区別します。良くはありませんが、箱から出してすぐに動作します...

于 2013-02-19T10:57:51.780 に答える