2015-09-26 11 views
3

Есть похожие вопросы (PHP: Find images and links with relative path in output and convert them to absolute path), но я не уверен, что они решают эту проблему.Найти абсолютный путь к изображению из относительного пути с помощью 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/"). Я также столкнусь с такой же проблемой.

Так что, учитывая, что я не буду знать, где будет установлен этот плагин во время использования, как я могу обеспечить правильность этих путей?

Если возможно, я бы хотел, чтобы вам не пришлось помещать полные пути в атрибуты данных.

UPDATE

Это структура папок плагина. Эта папка может быть установлена ​​в любом месте в public_html. И каталог изображений может быть где угодно:

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

Пробовал ли вы 'realpath()'? –

+0

Или что-то с 'pathinfo()'? –

+0

Yea @Daenu, спасибо. Я попробовал 'realpath()' без везения - если он не может решить путь, чтобы начать, я думаю, это не сработает. – user3065931

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^