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 语句中检索这个变量并发送到我的 INSERT php 文件。

$('#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}
        });
    });
});

我当前获得的文件名是原始名称,而不是附加名称。感谢您对此的任何帮助。

专辑页面.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 等的 $variable。我只是 POSTING 文件,它最终是从输入中选择的原始文件。

这是选择文件的表格。

<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.phpupcount_name($name)在某个时候调用。

然后会发生preg_replace_callback被调用。这个函数专门接受一个字符串和一个正则表达式,以及一个额外的“回调”函数。它在字符串上运行正则表达式并获取一组匹配项,然后将其传递给回调函数。回调允许您以灵活的方式“注入”行为:在这种情况下,回调是一种定义每个正则表达式匹配的替换字符串的方式。

upcount_name_callback函数就是这里调用的函数。要了解它的作用,您必须了解正则表达式。这有点复杂,但本质上它是在寻找一些数字([\d]+部分),.然后是行尾。upcount_name_callback将 this 作为一个数字,它递增和一个扩展,如果它存在,它会按原样返回,如果不存在则作为空字符串。

结果是这似乎将“blah.jpg”更改为“blah1.jpg”,将“blah1.jpg”更改为“blah2.jpg”。但是,看起来如果您返回的名称相同,它实际上并没有被执行。您需要发布来自 albumBack.php 的调用代码行来确认这一点。

于 2012-06-21T17:53:42.383 回答