Как реализовать на PHP?
Новая тема Написать ответ
# Вс Июл 20, 2008 11:48 amadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
Суть вопроса в следуещем, есть база картинок нада зделать так что б они каждый раз при обновлении страницы отображалась не одна и таже а подставлялась другая, другими словами ротатор.
Можно это все впихнуть в несколько строк кода PHP, мои поиски не увенчались успехом.
с меня Drinks or Beer
# Вс Июл 20, 2008 12:01 pmВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
Самый простой вариант:
1а. Кладешь урлы картинок в файлик вида pics.php:
Код:
<?php
$picsarray[]="http://www.domain.com/first.jpg";
$picsarray[]="/relativefolder/second.jpg";
...
$picsarray[]="http://www.otherdomain.com/other.jpg";
?>


Причем удобнее всего именно так, а не заполнять массив одной строкой (хотя и менее грамотно).
Потом инклюдишь этот файл из любого другого и получаешь из массива нужное число картинок, ну например так:
Код:

include('pics.php');
shuffle($picsarray);
for ($i = 1; $i <= 10; $i++) {
    echo '<img src="'.$picsarray[$i].'" width="100" height="100" />';
}


1б. Кладешь урлы в текстовой файлик по одному на строку. Массив наполняется чтением txt файла, разбивкой его в массив и выводом тем же способом, что и выше.
# Вс Июл 20, 2008 12:07 pmadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
ага, понял
+5
# Вс Июл 20, 2008 7:13 pmadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
а как впихнуть эту часть кода в файл, у меня чтото не получилось
Цитата:

Код:

include('pics.php');
shuffle($picsarray);
for ($i = 1; $i <= 10; $i++) {
echo '<img src="'.$picsarray[$i].'" width="100" height="100" />';
}

# Вс Июл 20, 2008 7:24 pmВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
Эээ... А ты так и впихивал? Smile Я же просто образец кода дал а не полностью Smile

Вот смотри. Есть у тебя, скажем главная страничка index.php и ты хочешь на ней выводить набор из четырех случайных картинок. Плюс - есть файлик с описанием массива картинок (pics.php).

Вот в месте где ты хочешь вывести картинки в html пишешь (прямо между html строчек):
Код:

<h1>Туточки будут супер картиночки</h1>
<?php
include('pics.php');
shuffle($picsarray);
for ($i = 0; $i < 4; $i++) {echo '<img src="'.$picsarray[$i].'" width="100" height="100" />';}
?>
<p>А вот туточки уже опять начинается HTML</p>

# Пн Июл 21, 2008 12:09 amsamedi Зарег.: 17.04.2008 ; Сообщ.: 214Ответить с цитатой
В pics.txt пишешь урл картинки на строку
Код:
http://www.example.com/images/avatars/139.gif
http://www.example.com/images/avatars/105.jpg
http://www.example.com/images/avatars/345.jpg


Потом выводишь в pics.php
Код:
<h1>Туточки будут супер картиночки</h1>
<?php
$pics = file('pics.txt');
shuffle($pics);
foreach ($pics as $src) {
    echo '<img src="'.$src.'" />';
}
?>
<p>А вот туточки уже опять начинается HTML</p>

# Пн Июл 21, 2008 1:24 amadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
реализовал вот так, мож кому еще пригодиться.
Код:

<?php
$pics = file('pics.txt');
shuffle($pics);
for ($i = 0; $i < 1; $i++) {echo '<img src="'.$pics[$i].'" width="150" height="150" />';}
 
?>

# Пн Июл 21, 2008 4:11 amВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
А, ну или так Smile Вариантов-то море.
# Пн Июл 21, 2008 10:54 amsamedi Зарег.: 17.04.2008 ; Сообщ.: 214Ответить с цитатой
adamant писал(а):
реализовал вот так, мож кому еще пригодиться.
Код:

<?php
$pics = file('pics.txt');
shuffle($pics);
for ($i = 0; $i < 1; $i++) {echo '<img src="'.$pics[$i].'" width="150" height="150" />';}
 
?>



Это неверный код. Цикл выполнится один раз. Чтобы обойти весь массив, нужно сделать так
Код:
for ($i = 0; $i < sizeof($pics); $i++)

Для полного перебора массива используется foreach, который проходит по всем элементам, а не for, который просто перебирает индексы.
# Пн Июл 21, 2008 11:37 amadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
samedi, спасибо, но мне надо что б выводилась одна картинка с бызы даных.

а в этом варианте выводится весь масив изображений.
а для перебора foreach у меня не отображаеться ничего, потому и перешол на for.


Последний раз редактировалось: adamant (Пн Июл 21, 2008 5:48 pm), всего редактировалось 1 раз
# Пн Июл 21, 2008 11:58 amadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
Вопрос к Вацлаву
Оффтоп:
Почему у тебя при "Обратиться по нику" герериться вот так Вацлав, а не так Вацлав. Может только у меня одного.

# Пн Июл 21, 2008 12:25 pmВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
Оффтоп:
adamant, не знаю, у меня все нормуль при обращении и к себе и к другим никам написанным на русском. Что-то с кодировкой браузера у тебя, кмк

# Вт Июл 22, 2008 1:06 amsamedi Зарег.: 17.04.2008 ; Сообщ.: 214Ответить с цитатой
adamant писал(а):
samedi, спасибо, но мне надо что б выводилась одна картинка с бызы даных.



Код:
<?php
$pics = file('pics.txt');
$i = mt_rand(0, sizeof($pics)-1);
echo '<img src="'.$pics[$i].'" width="150" height="150" />';
?>

# Вт Июл 22, 2008 10:59 amvitvirtual Зарег.: 11.06.2007 ; Сообщ.: 9061Ответить с цитатой
может вот такое подойдет? (файл rotate.php)

Цитата:


<?php

/*

AUTOMATIC IMAGE ROTATOR
Version 2.2 - December 4, 2003
Copyright (c) 2002-2003 Dan P. Benjamin, Automatic, Ltd.
All Rights Reserved.

http://www.hiveware.com/imagerotator.php

http://www.automaticlabs.com/


DISCLAIMER
Automatic, Ltd. makes no representations or warranties about
the suitability of the software, either express or
implied, including but not limited to the implied
warranties of merchantability, fitness for a particular
purpose, or non-infringement. Dan P. Benjamin and Automatic, Ltd.
shall not be liable for any damages suffered by licensee
as a result of using, modifying or distributing this
software or its derivatives.


ABOUT
This PHP script will randomly select an image file from a
folder of images on your webserver. You can then link to it
as you would any standard image file and you'll see a random
image each time you reload.

When you want to add or remove images from the rotation-pool,
just add or remove them from the image rotation folder.


VERSION CHANGES
Version 1.0
- Release version

Version 1.5
- Tweaked a few boring bugs

Version 2.0
- Complete rewrite from the ground-up
- Made it clearer where to make modifications
- Made it easier to specify/change the rotation-folder
- Made it easier to specify/change supported image types
- Wrote better instructions and info (you're them reading now)
- Significant speed improvements
- More error checking
- Cleaner code (albeit more PHP-specific)
- Better/faster random number generation and file-type parsing
- Added a feature where the image to display can be specified
- Added a cool feature where, if an error occurs (such as no
images being found in the specified folder) *and* you're
lucky enough to have the GD libraries compiled into PHP on
your webserver, we generate a replacement "error image" on
the fly.

Version 2.1
- Updated a potential security flaw when value-matching
filenames

Version 2.2
- Updated a few more potential security issues
- Optimized the code a bit.
- Expanded the doc for adding new mime/image types.

Thanks to faithful ALA reader Justin Greer for
lots of good tips and solid code contribution!


INSTRUCTIONS
1. Modify the $folder setting in the configuration section below.
2. Add image types if needed (most users can ignore that part).
3. Upload this file (rotate.php) to your webserver. I recommend
uploading it to the same folder as your images.
4. Link to the file as you would any normal image file, like this:

<img src="http://example.com/rotate.php">

5. You can also specify the image to display like this:

<img src="http://example.com/rotate.php?img=gorilla.jpg">

This would specify that an image named "gorilla.jpg" located
in the image-rotation folder should be displayed.

That's it, you're done.

*/




/* ------------------------- CONFIGURATION -----------------------


Set $folder to the full path to the location of your images.
For example: $folder = '/user/me/example.com/images/';
If the rotate.php file will be in the same folder as your
images then you should leave it set to $folder = '.';

*/


$folder = '.';


/*

Most users can safely ignore this part. If you're a programmer,
keep reading, if not, you're done. Go get some coffee.

If you'd like to enable additional image types other than
gif, jpg, and png, add a duplicate line to the section below
for the new image type.

Add the new file-type, single-quoted, inside brackets.

Add the mime-type to be sent to the browser, also single-quoted,
after the equal sign.

For example:

PDF Files:

$extList['pdf'] = 'application/pdf';

CSS Files:

$extList['css'] = 'text/css';

You can even serve up random HTML files:

$extList['html'] = 'text/html';
$extList['htm'] = 'text/html';

Just be sure your mime-type definition is correct!

*/

$extList = array();
$extList['gif'] = 'image/gif';
$extList['jpg'] = 'image/jpeg';
$extList['jpeg'] = 'image/jpeg';
$extList['png'] = 'image/png';


// You don't need to edit anything after this point.


// --------------------- END CONFIGURATION -----------------------

$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);
}
}

?>


# Вт Июл 22, 2008 12:29 pmadamant Зарег.: 20.03.2008 ; Сообщ.: 11494Ответить с цитатой
samedi, спасиб еще раз, +5
vitvirtual, спасиб, но думаю чем меньше кода тем лутше. но всеже возьму на заметку. +5
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.