Есть похожие вопросы (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
Может быть, следующий код может помочь. Он будет рекурсивно искать каталоги, начиная с корня документа, пока не найдет каталог с именем «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
внутри, хотя это было бы крайне ненадежно.
Других решений пока нет …