1

在通读手册之前甚至在多次阅读手册之后,我都遇到了 glob 函数的问题,但我似乎仍然偶然发现了一些看似基本的问题。

过去我在返回图像时遇到了问题,因为我使用的目录是绝对的,而不是相对的。我也遇到了从 foreach 返回图像的问题,因为我正在循环但没有将字符串添加到主字符串,因此只获取最后一个图像等。

经历过这些以前的问题后,我认为我已经克服了这些问题,并且知道什么会起作用。我尝试使用的代码最终将位于通过 AJAX 加载的页面上的函数中。该函数在加载的页面上调用。

但是,我什至不能让它在静态页面上工作!

我正在使用的代码是这样的:

<?php
    $dir = '/portfolio/_images/design/curiousc/gallery/';
    $files = glob(dirname(__FILE__).$dir.'*.{jpg,png,gif,jpeg}', GLOB_BRACE);
    foreach ($files as $file){
        $output = '<img class="project inner-module" src="'.$dir.basename($file).'" alt="'.$file.'" />';
        $images .= $output;
    };
    var_dump($files); //Returns this: array(0) { }

    //I know the $dir is correct as it loads the following code.
    //For sake of reference, I have manually added the filename.
    //$images .= '<img class="project inner-module" src="'.$dir.'1-portrait-900.png" alt="'.$file.'" />';

    //I would eventually have this feature inside a function so would preferably have 'return' rather than 'echo'
    echo $images;
?>

我已经尝试将$dir手动代码作为单行进行,并且可以正常工作,因此我知道该目录已正确列出。我还做了一个var_dump($files);在页面中返回“array(0) { }”的操作。如果我错了,请纠正我,但这是否意味着它找不到任何文件?

任何帮助,将不胜感激!该代码最终将列出与我的投资组合中特定项目相关的所有图像。

谢谢!

[编辑]

为了@Darhazer 的帮助,添加文件结构和 AJAX 脚本。

文件结构:

/_inc/js/ajaxtrigger.js *这是 AJAX 脚本所在和工作的地方。

/index.php这是我测试 glob 函数的静态页面。

/portfolio/index.php使用 AJAX 加载到 index.php

/portfolio/project.php这被加载到portfolio/index.php 中,随后在/index.php 中

/portfolio/_images/ category /*project*/gallery/每个项目的图片目录

我知道 project.php 在 /portfolio/ 中,但无论我将 src 设置为 /portfolio/_images/... 还是仅设置 _images/...

我用于 AJAX 加载的脚本是:

$(document).ready(function(){

bindNewClick(); 

function bindNewClick(){
    $('a.ajaxtrigger').on('click', function(){
        // The target for AJAX loading is set with data-target="target-name-here" applied to the <a>
        // The target div needs to have an id that matches #target-target-name-here
        var target = $('div#target-'+$(this).data('target'));
        doAjax($(this).attr('href'), target);
        return false;
    });
}

function doAjax(url, container){
    if(url.match('^http')){     
        var errormsg = 'Ah! AJAX can\'t load external content';
        container.html(errormsg);
    }
    else {
        $.ajax({
            url: url,
            timeout:5000,
            success: function(data){
                container.html(data);
                bindNewClick();
            },
            error: function(req,error){
                if(error === 'error'){
                    error = req.statusText;
                };
                var errormsg = 'Uh oh! There was an error: '+error;
                container.html(errormsg);
            },
            beforeSend: function(data){
                container.html('<p>Loading...</p>');
            }
        });
    };
};

});

4

1 回答 1

1

您正在提供绝对路径,从系统的 /root 开始您想要做的可能是扫描子文件夹,例如相对路径将 $dir 更改为dirname(__FILE__) . '/portfolio/_images/design/curiousc/gallery/'(假设投资组合是您的脚本所在的文件夹的子文件夹位于)

于 2013-07-06T16:02:02.327 回答