有类似问题(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
答案 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
的目录,尽管这种目录非常不可靠。