0

テーブルにエコーする前に、スクリプトに画像が存在するかどうかを確認させようとしています。存在しない場合は、代わりに別の画像をエコーする必要があります。私の問題は、画像が存在していても、それがelseファクターに移動することです。誰かがコーディングの間違いを見つけることができますか?

<?php
mysql_select_db("xxxx");
$result = mysql_query("SELECT * FROM yyyy WHERE frivillig=1 ORDER BY stilling");
while($row = mysql_fetch_array($result))
{
?>
<tr>
<td width="50px" class="frivillig"><?php  if (file_exists($url . "ansatte" . "/" . (utf8_encode($row['etternavn'])) . "%20" . (utf8_encode($row['fornavn'])) . ".jpg")) {
echo "<img" . " " . "src='" . $url . "ansatte" . "/" . (utf8_encode($row['etternavn'])) . "%20" . (utf8_encode($row['fornavn'])) . ".jpg'" . " " . "height='50px'/>";
}
else {
echo "<img" . " " . "src='" . $url . "images/mangler.png'" . " " . "height='50px'/>";
}
?>

ご覧のとおり、完全なURLに$ urlを使用し、画像は/ansatte/フォルダーに配置されます。

助けてくれてありがとう!

4

3 に答える 3

2

file_exists()URLをチェックするためのものではありません。の呼び出しfile_exists()は、URLではなく相対または絶対ファイルシステムパスを反映する必要があります。

于 2013-01-29T20:07:17.733 に答える
2

リモートリソースをチェックするための以下のスニペットを検討してください。

$path = $url . "ansatte" . "/" . (utf8_encode($row['etternavn'])) . "%20" . (utf8_encode($row['fornavn'])) . ".jpg"

$ch = curl_init($path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$response = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpcode < 400) { // Filter out bad request, not found, etc
 // found
} else {
 // not accessible
}

php5-curlがインストールされていない場合は、次の代替案も検討できます。

getimagesize

ここでも、特定のストリームのみがサポートされていますが、使用法は単純であり、リターンをより適切に検証します。

if (getimagesize($path) !== FALSE) {
  //exists
}

fopen

if (fopen($path,"r") !== FALSE) {
  // exists
}

get_headers

$headers = get_headers($path, TRUE);
if ($headers !== false && isset($headers['Content-Type']) && $headers['Content-Type'] == 'image/jpeg') {
  // exists
}
于 2013-01-29T20:11:54.643 に答える
0

私はここでちょっと考えて、画像ファイルが実際にはスクリプトと同じサーバー上にあると仮定します。その場合、ファイルが存在するかどうかを確認するときは、URLではなく絶対パスまたは相対パスを使用する必要があります。

<?php

$stmt = $dbh->prepare("SELECT * FROM yyyy WHERE frivillig=1 ORDER BY stilling");
$stmt->execute();
$rows = $stmt->fetchAll();

$url = 'http://www.yoursite.com/subdir/';
$path = '/path/to/yoursite/subdir/';

foreach ($rows as $row) {
    ?>
    <tr>
    <td width="50px" class="frivillig">
    <?php
    if (file_exists($path . "ansatte" . "/" . (utf8_encode($row['etternavn'])) . "%20" . (utf8_encode($row['fornavn'])) . ".jpg")) {
        echo "<img" . " " . "src='" . $url . "ansatte" . "/" . (utf8_encode($row['etternavn'])) . "%20" . (utf8_encode($row['fornavn'])) . ".jpg'" . " " . "height='50px'/>";
    }
    else {
        echo "<img" . " " . "src='" . $url . "images/mangler.png'" . " " . "height='50px'/>";
    }
}
?>

また、@ crushが述べたように、関数を使用するべきではありませんmysql_*。これらはPHP5.5で非推奨になりました。上記の例ではPDOを使用しています。

于 2013-01-29T20:23:17.963 に答える