PHP glob()不识别文件存在

时间:2013-07-06 15:57:55

标签: php ajax image glob

我之前遇到过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){}”。如果我错了,请纠正我,但这是否意味着它找不到任何文件?

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

谢谢!

[编辑]

添加文件结构和AJAX脚本以获得@ Darhazer的帮助。

文件结构:

/ _ 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>');
            }
        });
    };
};

});

1 个答案:

答案 0 :(得分:1)

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