2015-09-26 143 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> 

這被傳遞給一個具有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/")。我也會在這裏面對同樣的問題。

所以考慮到我不知道這個插件在使用時會被安裝到什麼地方,我如何確保這些路徑是正確的?

如果可能,我想避免必須將完整路徑放在數據屬性中。

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的目錄,儘管這樣會很不可靠。