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

Реферальная программа Мегаплана

Выбрать шаблон и создать сайт

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

#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

#2 Xap

Xap
    Topic Starter
  • Пользователь
  • 1 520 сообщений
  • Репутация: 0

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

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

#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 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