2016-07-31 7 views
0

У меня возникли проблемы с этим кодом и с использованием разных электронных писем для просмотра изображений в каталоге (обработано/$ email) и изменений электронной почты на каждой соответствующей записи формы, но отображаются только изображения из самая последняя папка, созданная независимо от заданного адреса электронной почты.

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST"> 
E-mail: 
<input type="text" name="email" id="email2"><br> 
<br> 
<input type="submit" value="Retrieve" name="submit"><br><br> 
</form> 

и вот PHP:

<?php 
function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'gif', 'png')) 
    { 
    if (substr($directory, -1) == '/') { 
     $directory = substr($directory, 0, -1); 
    } 
    $html = ''; 
    if (
     is_readable($directory) 
     && (file_exists($directory) || is_dir($directory)) 
    ) { 
     $directoryList = opendir($directory); 
     while($file = readdir($directoryList)) { 
     if ($file != '.' && $file != '..') { 
      $path = $directory . '/' . $file; 
      if (is_readable($path)) { 
       if (is_dir($path)) { 
        return scanDirectoryImages($path, $exts); 
       } 
       if (
        is_file($path) 
        && in_array(end(explode('.', end(explode('/', $path)))), $exts) 
       ) { 
        $html .= '<a href="' . $path . '"><img src="' . $path 
         . '" style="max-height:250px;max-width:250px" /> </a>'; 

       } 
      } 
     } 
     } 
     closedir($directoryList); 
    } 
    return $html; 

} 

echo scanDirectoryImages(processed.$_POST['email2']); 
    ?> 

я пробовал переменные Сброс переменных и т.д. Это не работает. Когда я вернусь к форме с любой страницы, она пока покажет только самую последнюю загруженную папку изображений. Единственное, что заставит его показывать новые изображения, - это если есть новый каталог. Мне кажется, что я как-то подхожу к этому принципиально неправильному, и я новичок в PHP, поэтому некоторая помощь была бы чрезвычайно оценена.

+0

Вы имеете 'id' и' name' перепутал ~ вы должны использовать 'name' Опубликованный переменный ... – RamRaider

ответ

0

Оригинальная функция носит рекурсивный характер, но не использует существующий набор классов recursiveIterator - надеюсь, что в этом отношении будет использоваться ниже. Когда я попробовал вашу оригинальную функцию, все, что я получил, чтобы вернуть это имя папки, а не список файлов/изображений.

function scanImageDirectory($directory, $root, $exts=array('jpg','jpeg','png','gif'), $exclusions=array('bmp')){ 
    $html=array(); 

    $dirItr = new RecursiveDirectoryIterator($directory); 
    $filterItr = new DirFileFilter($dirItr, $exclusions, $directory, 'all'); 
    $recItr = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST); 

    foreach($recItr as $filepath => $info){ 
     if($info->isFile() && in_array(strtolower(pathinfo($info, PATHINFO_EXTENSION)), $exts)) { 
      $filename=str_replace(array(realpath($root), chr(92)), array('', chr(47)), realpath($info)); 
      $html[]="<a href='{$filename}' target='_blank'><img src='{$filename}' alt='{$info->getFilename()}' /></a>"; 
     } 
    } 
    return implode(PHP_EOL,$html); 
} 



$dir=ROOT.'/images/css/icons/browsers'; 
$root='c:/wwwroot'; 

echo scanImageDirectory($dir, $root); 

Или, как, например, для вашей ситуации

$dir="processed/{$_POST['email']}"; 
$root=$_SERVER['DOCUMENT_ROOT']; 
echo scanImageDirectory($dir, $root); 

Я понимаю, что класс DirFileFilter это один я написал, а не родной класс PHP - это может быть описано только как id-10-T ошибка .. Извинения - вот этот класс.

class DirFileFilter extends RecursiveFilterIterator{ 

    protected $exclude; 
    protected $root; 
    protected $mode; 

    public function __construct($iterator, array $exclude, $root, $mode='all'){ 
     parent::__construct($iterator); 
     $this->exclude = $exclude; 
     $this->root = $root; 
     $this->mode = $mode; 
    } 

    public function accept(){ 
     $folpath=rtrim(str_replace($this->root, '', $this->getPathname()), '\\'); 
     $ext=strtolower(pathinfo($this->getFilename(), PATHINFO_EXTENSION)); 

     switch($this->mode){ 
      case 'all': 
       return !(in_array($this->getFilename(), $this->exclude) or in_array($folpath, $this->exclude) or in_array($ext, $this->exclude)); 
      case 'files': 
       return ($this->isFile() && (!in_array($this->getFilename(), $this->exclude) or !in_array($ext, $this->exclude))); 
      break; 
      case 'dirs': 
      case 'folders': 
       return ($this->isDir() && !(in_array($this->getFilename(), $this->exclude)) && !in_array($folpath, $this->exclude)); 
      break; 
      default: 
       echo 'config error: ' . $this->mode .' is not recognised'; 
      break; 
     } 
     return false; 
    } 
    public function getChildren(){ 
     return new self($this->getInnerIterator()->getChildren(), $this->exclude, $this->root, $this->mode); 
    } 
} 
+0

спасибо! Я немного смущен, потому что у вас есть неиспользуемая переменная ($ dir). Также я попробовал вашу функцию и не отобразил изображения в каталоге, который я ввожу в форму после исправления других переменных (вы их отредактировали, когда я набрал это!) –

+0

Я отредактировал его, потому что я заметил ошибочный код - это заняло некоторое время, так как я все еще спящий, но вы использовали идентификатор, а не имя (POST vars используют имя). У меня это нормально работает, создав структуру каталогов для размещения адресов электронной почты и т. д. – RamRaider

+0

Все еще не работает на http: //98.117.55.190/myimageshandle.php и все ниже формы с использованием вашего кода ушли (должно быть несколько абзацев ниже, вы можете увидеть на других страницах), lol http://i.imgur.com/F0yjsbS.png это то, что я смотрю прямо сейчас, и я сбиваю с толку –

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