使用PHP

时间:2015-09-26 08:32:20

标签: php jquery path relative-path absolute-path

有类似问题(PHP: Find images and links with relative path in output and convert them to absolute path),但我不确定他们是否解决了这个问题。

我正在开发一个可以安装在任何目录中的jQuery插件。它使用的图像也可以安装在任何目录中。图像的路径设置在数据属性中,如下所示:

<div id="pr-preview"
    data-img-src="img/example.jpg"
    data-savepath="img/resized/">
</div>

将其传递给具有和AJAX功能的PHP文件。在我的PHP文件中,我需要像这样得到图像的尺寸:

list($width, $height) = getimagesize($this->data['img']);

但显然我收到了一个错误:

getimagesize(img/example.jpg): failed to open stream: No such file or directory in ...

PHP文件调整图像大小,需要将其保存到预定义的保存路径(data-savepath="img/resized/")。我也会在这里遇到同样的问题。

因此,考虑到我不知道这个插件在使用时的安装位置,我该如何确保这些路径正确?

如果可能的话,我希望避免将完整路径放在数据属性中。

更新

这是插件文件夹结构。此文件夹可以安装在public_html中的任何位置。图像目录也可以在任何地方:

public_html/
            img/
               example.jpg
            pluginName/
                  css/
                  js/
                  php/
                     PluginName.php // where getimagesize() is called

1 个答案:

答案 0 :(得分:0)

也许以下代码可以提供帮助。它将递归搜索从文档根开始的目录,直到找到一个名为&#34; img&#34;的目录。您可以将返回的路径(&#34; $imgs&#34;)添加到图像文件名中,然后。

<php
define('IMG', 'img');
$docroot = $_SERVER['DOCUMENT_ROOT'];

$imgs = find_img($docroot) . '/';

function find_img($startdir){
    if(basename($startdir) == IMG){
        return realpath($startdir);
    }
    elseif(is_dir($startdir)){
        $results = glob($startdir . '/*', GLOB_ONLYDIR);
        foreach($results as $dir){
            if(basename($dir) == IMG){
                return realpath($dir);
            }
            else{
                return find_img($dir);
            }
        }
        return '';
    }
}
?>

当然,这假设您至少知道图像是什么&#39;调用目录并且只有一个位置。如果不是这种情况,您必须更改代码,例如这样它就会在里面搜索.jpg的目录,尽管这种目录非常不可靠。