2013-10-02 2 views
9

Было бы здорово, если бы кто-нибудь помог мне понять, почему браузер не может загрузить изображения (ошибка 404). Код работает, и источник изображения правильный, но я не могу понять, что не так. (с использованием localhost)Как отображать изображения из папки с помощью php - PHP

$dir   = '/home/user/Pictures'; 
$file_display = array(
    'jpg', 
    'jpeg', 
    'png', 
    'gif' 
); 

if (file_exists($dir) == false) { 
    echo 'Directory \'', $dir, '\' not found!'; 
} else { 
    $dir_contents = scandir($dir); 

    foreach ($dir_contents as $file) { 
     $file_type = strtolower(end(explode('.', $file))); 

     if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true) { 
      echo '<img src="', $dir, '/', $file, '" alt="', $file, '" />'; 
     } 
    } 
} 
+0

так почему вы не публикуете код? –

+0

Просто сделал. Забыл в отступ. – user2837048

+0

есть синтаксические ошибки в коде выше, как in_array (не имеет закрывающей круглой скобки. $ Char в echo – jerjer

ответ

11

Вы обнаружили ошибку в описании ниже. Используйте. нет,

echo '<img src="', $dir, '/', $file, '" alt="', $file, $ 

в

echo '<img src="'. $dir. '/'. $file. '" alt="'. $file. $ 

и

echo 'Directory \'', $dir, '\' not found!'; 

в

echo 'Directory \''. $dir. '\' not found!'; 
+3

на самом деле для echo statement запятая может вместо оператора concat – jerjer

+1

запятая на самом деле имеет лучшую производительность по сравнению с. на эхо-операциях – jerjer

+1

конкатенация строк интенсивно связана с памятью – jerjer

3

У вас есть два способа сделать это:

МЕТОД 1. Безопасный способ.

Поместите изображения на/WWW/HTDOCS/

<?php 
    $www_root = 'http://localhost/images'; 
    $dir = '/var/www/images'; 
    $file_display = array('jpg', 'jpeg', 'png', 'gif'); 

    if (file_exists($dir) == false) { 
     echo 'Directory \'', $dir, '\' not found!'; 
    } else { 
     $dir_contents = scandir($dir); 

     foreach ($dir_contents as $file) { 
      $file_type = strtolower(end(explode('.', $file))); 
      if (($file !== '.') && ($file !== '..') && (in_array($file_type, $file_display))) { 
       echo '<img src="', $www_root, '/', $file, '" alt="', $file, '"/>'; 
      break; 
      } 
     } 
    } 
?> 

МЕТОД 2. небезопасный, но более гибким.

Поместите изображения в любую директорию (у apache должно быть разрешение на чтение файла).

<?php 
    $dir = '/home/user/Pictures'; 
    $file_display = array('jpg', 'jpeg', 'png', 'gif'); 

    if (file_exists($dir) == false) { 
     echo 'Directory \'', $dir, '\' not found!'; 
    } else { 
     $dir_contents = scandir($dir); 

     foreach ($dir_contents as $file) { 
      $file_type = strtolower(end(explode('.', $file))); 
      if (($file !== '.') && ($file !== '..') && (in_array($file_type, $file_display))) { 
       echo '<img src="file_viewer.php?file=', base64_encode($dir . '/' . $file), '" alt="', $file, '"/>'; 
      break; 
      } 
     } 
    } 
?> 

И создать другой скрипт для чтения файла изображения.

<?php 
    $filename = base64_decode($_GET['file']); 
    // Check the folder location to avoid exploit 
    if (dirname($filename) == '/home/user/Pictures') 
     echo file_get_contents($filename); 
?> 
+0

с учетом первого метода, я думаю, оператор «break» и проверка, заканчивается ли конец файла «.». или «..» не нужны, если я не пропустил что-то, а затем хотел бы знать, что. –

7

Вот возможное решение решение # 3 на мои комментарии к blubill Ответим:

yourscript.php 
======================== 
<?php 
    $dir = '/home/user/Pictures'; 
    $file_display = array('jpg', 'jpeg', 'png', 'gif'); 

    if (file_exists($dir) == false) 
    { 
     echo 'Directory "', $dir, '" not found!'; 
    } 
    else 
    { 
     $dir_contents = scandir($dir); 

     foreach ($dir_contents as $file) 
     { 
      $file_type = strtolower(end(explode('.', $file))); 
      if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true)  
      { 
       $name = basename($file); 
       echo "<img src='img.php?name={$name}' />"; 
      } 
     } 
    } 
?> 


img.php 
======================== 
<?php 
    $name = $_GET['name']; 
    $mimes = array 
    (
     'jpg' => 'image/jpg', 
     'jpeg' => 'image/jpg', 
     'gif' => 'image/gif', 
     'png' => 'image/png' 
    ); 

    $ext = strtolower(end(explode('.', $name))); 

    $file = '/home/users/Pictures/'.$name; 
    header('content-type: '. $mimes[$ext]); 
    header('content-disposition: inline; filename="'.$name.'";'); 
    readfile($file); 
?> 
+0

Я очень люблю это – afaolek

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