jquery — находит абсолютный путь к изображению из относительного пути с переполнением стека

Есть похожие вопросы (PHP: найти изображения и ссылки с относительным путем на выходе и преобразовать их в абсолютный путь) но я не уверен, что они решат эту проблему.

Я разрабатываю плагин JQuery, который может быть установлен в любом каталоге. Он использует изображения, которые также могут быть установлены в любом каталоге. Путь к изображению задается в атрибуте данных следующим образом:

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

Это передается в файл PHP с функцией AJAX. В моем 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

3

Решение

Может быть, следующий код может помочь. Он будет рекурсивно искать каталоги, начиная с корня документа, пока не найдет каталог с именем «img». Вы можете предварять возвращенный путь («$imgs«) к имени файла вашего изображения, тогда.

<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 '';
}
}
?>

Это предполагает, конечно, что вы, по крайней мере, знаете, как называется каталог изображений, и что существует только одно местоположение. Если это не так, вам придется изменить код, например, так что он ищет каталоги с .jpg внутри, хотя это было бы крайне ненадежно.

0

Другие решения

Других решений пока нет …