Перейти к содержимому



Смена картинки при перезагрузке

#1

Поделиться сообщением #1



Xap

Xap
  • Неактивные
  • 1 520 сообщений
  • Репутация: 0
0

Отправлено 17 Апрель 2009 - 20:42

где-то на форуме когда-то скачал вот этот файл:
<?php
$folder = '.';
$extList = array();
$extList['gif'] = 'image/gif';
$extList['jpg'] = 'image/jpeg';
$extList['jpeg'] = 'image/jpeg';
$extList['png'] = 'image/png';
$img = null;
if (substr($folder,-1) != '/') {
$folder = $folder.'/';
}
if (isset($_GET['img'])) {
$imageInfo = pathinfo($_GET['img']);
if (
isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
file_exists( $folder.$imageInfo['basename'] )
) {
$img = $folder.$imageInfo['basename'];
}
} else {
$fileList = array();
$handle = opendir($folder);
while ( false !== ( $file = readdir($handle) ) ) {
$file_info = pathinfo($file);
if (
isset( $extList[ strtolower( $file_info['extension'] ) ] )
) {
$fileList[] = $file;
}
}
closedir($handle);
if (count($fileList) > 0) {
$imageNumber = time() % count($fileList);
$img = $folder.$fileList[$imageNumber];
}
}
if ($img!=null) {
$imageInfo = pathinfo($img);
$contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];
header ($contentType);
readfile($img);
} else {
if ( function_exists('imagecreate') ) {
header ("Content-type: image/png");
$im = @imagecreate (100, 100)
or die ("Cannot initialize new GD image stream");
$background_color = imagecolorallocate ($im, 255, 255, 255);
$text_color = imagecolorallocate ($im, 0,0,0);
imagestring ($im, 2, 5, 5, "IMAGE ERROR", $text_color);
imagepng ($im);
imagedestroy($im);
}
}
?>
А мне надо, чтобы он выводил не случайную картинку из списка а по порядку. В папке header три картинки под нумерацией 1,2,3 и чтобы он выводил поочередно. Можно ли такое сделать? И еще один вопрос. Во всех браузерах выполнение этого кода не всегда срабатывает. Точнее бывает перезагружаешь, а картинка остается та же самая. Или например (у меня два таких кода стоит random.php и random1.php? которые одновременно одноименные файлы из разных папок должны выводить на страницу) верхняя картинка остается та же, а нижняя часть уже другая и получается что картинка собрана из разных файлов. Так не должно быть. Как это исправить?

Заранее благодарен.

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Иконка вместо ссылки в меню
  2. Смена фото при обновлении страницы
  3. Как сделать меню без перезагрузки контента?
  4. Изменение размера картинки при уменьшении окна браузера
  5. Проблема со ссылками на картинки после смены CMS

#2

Поделиться сообщением #2



Xap

Xap
    Topic Starter
  • Неактивные
  • 1 520 сообщений
  • Репутация: 0

Отправлено 17 Апрель 2009 - 21:29

Еще одна проблема. Когда несколько раз понажимаешь на страницы, шапка из файлов выводимых этим кодом просто перестает изменяться. То ест файлы, которые были при последне загрузке страницы остаются такими же.
  • 0

#3

Поделиться сообщением #3



ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Апрель 2009 - 17:17

Xap, сделать всё можно. Достаточно либо сессиях хранить счётчик, либо в файле для данного счётчика. Если в сессиях, то

//Если сессия ещё не создана или счётчик равен 3
$_SESSION['count'] = (empty($_SESSION['count']) || $_SESSION['count'] == 3) ? 1 : $_SESSION['count'];

По поводу того, что загружается та же картинка во всём виновато кеширование.
Достаточно в строке с адресом после "?" страницы к которой мы обращаемся передавать случайное число... Либо есть возможность на PHP отменять кеширование
Пункт Как я отменяю кеширование страниц браузером
  • 0

#4

Поделиться сообщением #4



ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Апрель 2009 - 20:09

<?php

session_start();

$_SESSION['count'] = (empty($_SESSION['count']) || $SESSION['count'] == 3) ? 1 : $_SESSION['count']+1;



$folder = '.';

$extList = array();

$extList['gif'] = 'image/gif';

$extList['jpg'] = 'image/jpeg';

$extList['jpeg'] = 'image/jpeg';

$extList['png'] = 'image/png';

$img = null;

if (substr($folder,-1) != '/') {

$folder = $folder.'/';

}

if (isset($_GET['img'])) {

$imageInfo = pathinfo($_GET['img']);

if (

isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&

file_exists( $folder.$imageInfo['basename'] )

) {

$img = $folder.$imageInfo['basename'];

}

} else {

$fileList = array();

$handle = opendir($folder);

while ( false !== ( $file = readdir($handle) ) ) {

$file_info = pathinfo($file);

if (

isset( $extList[ strtolower( $file_info['extension'] ) ] )

) {

$fileList[] = $file;

}

}

closedir($handle);

if (count($fileList) > 0) {

$imageNumber = $_SESSION['count'];

$img = $folder.$fileList[$imageNumber];

}

}

if ($img!=null) {

$imageInfo = pathinfo($img);

$contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];

header ($contentType);

readfile($img);

} else {

if ( function_exists('imagecreate') ) {

header ("Content-type: image/png");

$im = @imagecreate (100, 100)

or die ("Cannot initialize new GD image stream");

$background_color = imagecolorallocate ($im, 255, 255, 255);

$text_color = imagecolorallocate ($im, 0,0,0);

imagestring ($im, 2, 5, 5, "IMAGE ERROR", $text_color);

imagepng ($im);

imagedestroy($im);

}

}

?>

  • 0


Оформление форума – IPBSkins.ru