0

PHPクラスについてサポートが必要です。私はそれがどのように機能するかについての知識が限られており、それについてもっと発見しようとしています。その間に、クラス内でこれらの関数を実行した後に変数を取得する必要があるという問題があります。

protected function upcount_name_callback($matches) {
        $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
        $ext = isset($matches[2]) ? $matches[2] : '';
        return ' ('.$index.')'.$ext;
    }

    protected function upcount_name($name) {
        return preg_replace_callback(
            '/(?:(?: \(([\d]+)\))?(\.[^.]+))?$/',
            array($this, 'upcount_name_callback'),
            $name,
            1
        );
    }

次のJSステートメントでこの変数を取得し、INSERTphpファイルに送信する必要があります。

$('#albumBack.fileupload').bind('fileuploaddone',function(e,data) {

    //Loop through each page and return object and write to DB
    $.each(data.files, function (index, file) {
        var filename = file.name;
        $.ajax({ 
            type: "POST",
            url: "../albumUploader/queries/albumPages.php",
            data: {file: filename}
        });
    });
});

現在取得しているファイル名は、追加された名前ではなく、元の名前です。これについて助けてくれてありがとう。

albumPages.php

//Variables for gallerimage table
    $originalName = $_POST['file'];
    $clientRef = $_SESSION['clientRef'];
    $galleryID = $_SESSION['newGalleryId'];
    $galleryLayout = $_SESSION['layoutID'];
    $imageID = rand();

    //Find the sort# for the gallery
    $qSortOrder = mysql_query("SELECT MAX(sort) AS sortOrder
                                    ,id
                                    ,clientRef
                                    ,galleryId
                                    FROM galleryimage
                                    WHERE galleryId='{$galleryID}' 
                                    AND clientRef= '{$clientRef}'
                                    ");
    $fsortOrder = mysql_fetch_array($qSortOrder);
    //Latest revision
    $orderNumber = $fsortOrder['sortOrder'];
    $order = $orderNumber + 1;

    $query = "INSERT INTO galleryimage 
            (
                galleryId
                ,image
                ,OrgImageName
                ,clientRef
                ,sort
                ,layout
            ) VALUES (
                '{$galleryID}'
                ,'{$imageID}'
                ,'{$originalName}'
                ,'{$clientRef}'
                ,'{$order}'
                ,'{$galleryLayout}'
            )";
    $return = mysql_query($query);

$ originalNameは、img.jpg、$ img(1).jpgなどとして定義する必要のある$変数です。私はPOSTファイルであり、入力から選択された元のファイルになります。

これは、ファイルを選択するフォームです。

<form class="fileupload" id="albumBack" action="../js/jQuery-file-upload/server/php/" method="POST" enctype="multipart/form-data" >
                <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
                <div class="row fileupload-buttonbar">
                        <span class="btn btn-success fileinput-button">
                            <span>Choose Back</span>
                            <input type="file" name="files[]">
                        </span>
                    </div>
4

1 に答える 1

1

albumBack.phpの内容を知らなければ、表示される動作を正確に確認することは困難です。しかし、albumBack.phpがupcount_name($name)ある時点で呼び出されると仮定しましょう。

次に何が起こるかというと、preg_replace_callbackが呼び出されます。この関数は、追加の「コールバック」関数とともに、文字列と正規表現を具体的に受け取ります。文字列に対して正規表現を実行し、一致のセットを取得して、コールバック関数に渡します。コールバックを使用すると、柔軟な方法で動作を「注入」できます。この場合、コールバックは、正規表現の一致ごとに置換文字列を定義する方法です。

関数はここupcount_name_callbackで呼ばれているものです。それが何であるかを理解するには、正規表現を理解する必要があります。[\d]+これは少し複雑ですが、基本的にはいくつかの番号(部分)を探し、.その後に行末が続きます。upcount_name_callbackこれを、増分する数値と、存在する場合はそのまま返す拡張子、存在しない場合は空の文字列として受け取ります。

結果として、これにより「blah.jpg」が「blah1.jpg」に、「blah1.jpg」が「blah2.jpg」に変更されたように見えます。ただし、返される名前が同じである場合は、実際には実行されていないように見えます。これを確認するには、albumBack.phpからコードの呼び出し行を投稿する必要があります。

于 2012-06-21T17:53:42.383 に答える