Помогите поправить скрипт PHP

Y
На сайте с 14.07.2009
Offline
0
914

История:

Мне нужен был скрипт чтобы в нем я указал папку и все картинки которые есть там выводились на страницу, нашел на этом форуме /ru/forum/327888.

Поставил себе работает, но вот в чем проблема.

Проблема:

На страницу выводятся не все картинки которые есть в папке, пример в папке 5 картинок, а выводятся 3 и еще пишет ошибку (Notice: Undefined offset: 3 in /home/u150/WWW/test.php on line 32)

Прошу Вас помочь мне, за ранее спасибо.

Вот сам скрипт:

<?php

function get_images($directory)
{
$filenames = array();
$directory = str_replace('\\', '/', $directory);
if(is_dir($directory))
{
$dp = opendir($directory);
while($filename = readdir($dp))
{
if(!is_dir($directory.'/'.$filename))
{
$file_ext = strtolower(substr($directory.'/'.$filename, strrpos($directory.'/'.$filename, '.')+1));
if(in_array($file_ext, array('jpg', 'gif', 'png')))
{
$filenames[count($filenames)] = $filename;
}
}
}
}
$dp = closedir();
return $filenames;
}

$path = '/images/'; // тут указываешь папку относительно корня веб дерева
$img_count = 9; // тут указываешь число картинок которое нужно выводить


$images = get_images($_SERVER["DOCUMENT_ROOT"].$path);
$i = 0;
while($images[$i])
{
$npic = rand(0, count($images)-1);
echo '<a href="'.htmlspecialchars($path.$images[$npic]).'" target="_blank"><img src="'.htmlspecialchars($path.$images[$npic]).'" border="0" alt="" width="50" ></a>';
unset($images[$npic]);
$images = array_values($images);
$i++;
if($i>=$img_count) break;
}
?>
J
На сайте с 02.02.2009
Offline
53
#1


<?
function get_images($directory='/',$max_pics = 10){
$return = array();
if ($handle = opendir($directory)) {
$i = 0;
while (false !== ($file = readdir($handle)) || $i<=$max_pics) {
if ($file != "." && $file != ".." && substr(mime_content_type($file),0,5) == 'image') {
$return[] = $file;
$i++;
}
}
closedir($handle);
}
return $return;
}
$path = '/folder';
$images = get_images($path);
if(count($images) > 0){
foreach($images as $image){
echo '<a href="'.htmlspecialchars($path.$image).'" target="_blank"><img src="'.htmlspecialchars($path.$image).'" border="0" alt="" width="50" ></a>';

}
}
?>

мм?

Y
На сайте с 14.07.2009
Offline
0
#2

Не работает, просто не чего не появляется(

Вот что написал: Warning: opendir(/images/Nokia 7510) [function.opendir]: failed to open dir: No such file or directory in /home/u150/WWW/test.php on line 5

ewg777
На сайте с 04.06.2007
Offline
225
#3
while($images[$i])
{

Оригинальная конструкция. foreach ($images as $value) - не проще ли?

I
На сайте с 29.04.2006
Offline
135
#4
yakxaker:
Не работает, просто не чего не появляется(
Вот что написал: Warning: opendir(/images/Nokia 7510) [function.opendir]: failed to open dir: No such file or directory in /home/u150/WWW/test.php on line 5

У вас такая папка существует с картинками и находится в нужном месте?

Тогда попробуйте назвать папку без пробела....

Demetrio
На сайте с 26.05.2008
Offline
113
#5


<?php

//директория, где смотрим картинки без завершающего слеша
$dir = '';
//макс.кол-во картинок
$max_images = 10;


$images = array();
$i = 0;

if($dir && $dir{strlen($dir)-1} !== '/') $dir = $dir.'/';

if($objs = glob($dir."*")){
foreach($objs as $obj){
if(is_dir($obj) || $obj == '.' || $obj == '..') continue;
if($i == $max_images) break;
$extension = array_pop(explode('.', $obj));
if(in_array($extension, array('png', 'jpg', 'gif'))){
$images[] = $obj;
++$i;
}
}
}

foreach($images as $image) echo '<a href="'.$image.'"><img src="'.$image.'" alt=""></a>';


?>
Размещусь на ваших площадках по тематикам: мобильная связь, спортивное питание
Y
На сайте с 14.07.2009
Offline
0
#6
Demetrio:

<?php

//директория, где смотрим картинки без завершающего слеша
$dir = '';
//макс.кол-во картинок
$max_images = 10;


$images = array();
$i = 0;

if($dir && $dir{strlen($dir)-1} !== '/') $dir = $dir.'/';

if($objs = glob($dir."*")){
foreach($objs as $obj){
if(is_dir($obj) || $obj == '.' || $obj == '..') continue;
if($i == $max_images) break;
$extension = array_pop(explode('.', $obj));
if(in_array($extension, array('png', 'jpg', 'gif'))){
$images[] = $obj;
++$i;
}
}
}

foreach($images as $image) echo '<a href="'.$image.'"><img src="'.$image.'" alt=""></a>';


?>

Отлично все работает, СПАСИБО большое, а можно как нить сделать пробел между картинками. а то не смотрица)

Demetrio
На сайте с 26.05.2008
Offline
113
#7
Отлично все работает, СПАСИБО большое, а можно как нить сделать пробел между картинками. а то не смотрица)

Вот эту строчку

foreach($images as $image) echo '<a href="'.$image.'"><img src="'.$image.'" alt=""></a>';

замените на

foreach($images as $image) echo '<a href="'.$image.'"><img src="'.$image.'" alt=""></a> ';

Можете ещё попробовать заменить вот на такой вариант, тоже должно поаккуратнее смотреться :)


//количество картинок на строке
$on_line = 5;

echo '<table cellpadding="5" cellspacing="0" border="0"><tr>';

for($i = 0; $i < sizeof($images); ++$i){
if($i && % $on_line == 0) echo '</tr><tr>';
echo '<td align="center" valign="center"><a href="'.$image.'"><img src="'.$image.'" alt=""></a></td>';
}

echo '</tr></table>';
Y
На сайте с 14.07.2009
Offline
0
#8

Не знаю в чем дело, когда просто смотрю этот скрипт, то я вижу картинки, как только я вставляю этот код в код 1с-bitrix то не чего не появляется(((

Demetrio
На сайте с 26.05.2008
Offline
113
#9

а там есть возможность вствлять php-код?

возможно, скрипт смотри картинки в другой папке, то есть не факт, что открытый адрес и рабочая директория скрипта совпадают

Y
На сайте с 14.07.2009
Offline
0
#10
Demetrio:
а там есть возможность вствлять php-код?
возможно, скрипт смотри картинки в другой папке, то есть не факт, что открытый адрес и рабочая директория скрипта совпадают

Да есть. ну это в сами файлы. Самое интересное что показывает" только одну папку это images/ на остальные не реагирует, ну из того что появляется ссылки не совпадают:

страница: http://сайт/catalog/17/515/516/4023.htm

url картинки: http://сайт/catalog/17/515/516/images/foto.jpg

Так что вот так, ну вот первый скрипт который я выложил, работал почти на ура, кроме того что появлялось не 5 картинок , а 3 (((

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий