2016-05-07 3 views
1

if (file_exists()を使用してwp-uploadsディレクトリに保存されているWP投稿の画像を取得しようとしていますが、ファイルのパスが認識されません。file_exists()がfalseを返すのはなぜですか?

各投稿ごとに、最大8つの画像があります。各画像は、ファイル名の末尾にa〜gの文字を持ちます(または何もありません)。また、ファイル名の特定の文字を置き換えるためのstr_replaceがあります。

各画像がある場合はそれを表示し、存在しない場合は何も戻さないようにする必要があります。したがって、ポストが最後のb、d、fの画像に関連付けられている場合、その3つだけを表示します。

私は(file_exists())を使わずにテストし、それぞれの画像を単純なエコーで拾うことができましたが、$imgのパスが認識されないようです。

イムPHPのnoobののビットので、任意の助けをいただければ幸いです...

$uid = get_post_meta (get_the_ID(), 'Unique number', true); 
$root ="/wp-content/uploads/2016/Collection/"; 
$path = str_replace(" ","_",$uid); 
$path = str_replace(".","_",$path); 
$path = str_replace(":","",$path); 

$img = $root.$path.".jpg"; 
$imga = $root.$path."a.jpg"; 
$imgb = $root.$path."b.jpg"; 
$imgc = $root.$path."c.jpg"; 
$imgd = $root.$path."d.jpg"; 
$imge = $root.$path."e.jpg"; 
$imgf = $root.$path."f.jpg"; 
$imgg = $root.$path."g.jpg"; 

if (file_exists($img)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; } 
if (file_exists($imga)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; } 
if (file_exists($imgb)) { echo "<img src='".$root.$path."b.jpg' />"; } else { echo ""; } 
if (file_exists($imgc)) { echo "<img src='".$root.$path."c.jpg' />"; } else { echo ""; } 
if (file_exists($imgd)) { echo "<img src='".$root.$path."d.jpg' />"; } else { echo ""; } 
if (file_exists($imge)) { echo "<img src='".$root.$path."e.jpg' />"; } else { echo ""; } 
if (file_exists($imgf)) { echo "<img src='".$root.$path."f.jpg' />"; } else { echo ""; } 
if (file_exists($imgg)) { echo "<img src='".$root.$path."g.jpg' />"; } else { echo ""; }` 

答えて

1

あなたは

$rootは、おそらくあなたの絶対ファイルパスのルートではありません(はおそらく絶対にを意味する)ので、代わりにこのための特別なスーパー変数を使用し、あなたがアドレスをルックアップするためにPHPを言っている方法を再配置する必要がありますファイルがを存在する場合

$img = $_SERVER['DOCUMENT_ROOT'].$root.path.".jpg" 
//while retaining your current/at the start of $root 

これはチェックのファイル構造で、:ウェブアクセス可能ファイルパスのルートである、したがって、あなたは持っている <img>タグで参照するファイル構造ではなく、上記の例で正しいと思われます。

だから、あなたの全体的な補正は次のようになります。

$root ="/wp-content/uploads/2016/Collection/"; 
$path = str_replace(" ","_",$uid); 
$path = str_replace(".","_",$path); 
$path = str_replace(":","",$path); 

$img = $root.$path.".jpg"; 
... 
if (file_exists($_SERVER['DOCUMENT_ROOT'].$img)){ 
.... 
} 

追加のノートがそののでこのファイルの先頭にclearstatcache()を呼び出す必要がありますので、この関数の結果はキャッシュされるということです画像が存在するかどうかを新たに確認することができます。現時点ではイメージが存在していても、PHPはキャッシュされた過去の結果を使用していますが、これは最新ではない可能性があります。

+0

はい、フルまたは絶対ファイルパスを使用する必要があります。これとうまくいかない場合は、[allow_url_fopen](http://php.net/filesystem.configuration#ini.allow-url-fopen) )があなたのPHP設定で有効になります。 –

+0

'$ _SERVER ['DOCUMENT_ROOT']'私の問題を解決しました - ありがとうございます。 – Aitch

1

あなたはので、それはサーバのルートディレクトリから始めて、/$rootを開始します。最初の/を削除して、再試行してください。

+0

これは* *ソリューションですが、それは、画像へのファイルパスが実行されているPHPスクリプトの子であることは非常に広範な仮定を作るために最善の解決策ではないので、PHPスクリプトが配置されている場合たとえば '/ wp-content/admin /'フォルダに、この解決策は '$ root'で指定されたファイルを見つけることができません。 – Martin

+0

あなたは正しいですが、私はすべての情報を持っていないので、ドキュメントルートがWordPressのルートにあると思いました。 – Manhim

0
$uid = get_post_meta (get_the_ID(), 'Unique number', true); 
$path = str_replace(" ","_",$uid); 
$path = str_replace(".","_",$path); 
$path = str_replace(":","",$path); 

$uploads = wp_upload_dir(); 

ベースルートディレクトリを取得します。

$root = $uploads['path']; 
$imgDir = $root.$path.".jpg"; 

if (file_exists($imgDir)){ 
....... 
} 
+0

これは何をしますか?なぜこれは機能しますか? – Martin

+0

C:\ development \ xampp \ htdocs \ example.com/content/uploads/2016/05から確認してください –

+0

おそらくこのデータをあなたの答えに追加して、あなたの答えをより便利にしてください – Martin

関連する問題