Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите найти ошибку в ПХП скрипте.


Автор: gogle 23.8.2004, 19:54
Прогер написал за 5 минут до отъезда на юга скрипт в спешке и свалил.
Скрипт просто переименовывает банеры т.е. есть в дире файлы
1.jpg, 2jpg, 3.jpg, и.т.д
Вобщем он должен их переименовывать 1 во 2, 2 в 3, 3 в 1 , ну вобщем цикл.
А вместо этого он просто помоему удаляет файл с именем 1.jpg а файл 2.jpg переименовывает в 1.jpg ну и.т.д
Вот собственно сам скрипт.

<?
$bandir = "/home/site/public_html/ban/";

//==================

$d = dir($bandir);
$cname = "";
$tmp = "";
$tt = 1;
while (false !== ($ent = $d->read())) {
if ($ent != '.' && $ent != '..')
{
$fil = pathinfo($ent);
$fname = current(explode('.', $fil[basename]));
if ($fname == (int)$fname)
{
$nname = (int)$fname-1;
if ($nname!='0')
@rename($bandir.$ent,$bandir.$nname.".".$fil[extension]);
else
{
@rename($bandir.$ent,$bandir."tmp.".$fil[extension]);
$tmp = "tmp.".$fil[extension];
}
if ($tt < (int)$fname)
$cname = $ent;
}
}
}
$d->close();
if ($cname!='')
@rename($bandir.$tmp,$bandir.$cname);


?>

Автор: arial 23.8.2004, 20:39
А зачем файлы с баннерами переименовывать циклически, если не секрет? Уж не вырезка ли это гланд через задний проход? Баннерокрутилка чтоли?

Автор: gogle 23.8.2004, 22:21
Да не секрет и тем более не вырезка "гланд через задний проход" smile.gif
Некоторые скрипты просто отсылают та 3 буквы банерокрутилки типа http://www.domain.com/ban.php , им подавай реальную картинку sad.gif
Поэтому я хочу через крон запустить этот скрипт , и пусть меняет мои нколичество баннеров по циклу через нное время.

Автор: gogle 23.8.2004, 22:37
Блин ну ребята , скрипт то простой для програмиста , помогите пожалуйста , надо срочно !!!

Автор: IZ@TOP 23.8.2004, 22:52
Попробуй так:

Цитата
<?php

$path = 'banners/';

function newname($ext) {
    $words = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_-";
    $newlen = 15;
    $n = '';
    for($i = 0; $i < $newlen; $i++) {
        $n .= $words[rand(0, strlen($words) -1)];
    }
    return $n.'.'.$ext;
}

$d = dir($path);
while($f = $d->read()) {
    if(filetype($path.$f) == 'file') {
        $bname = basename($path.$f);
        list(,$ext) = explode('.', $bname);
        rename($path.$f, $path.newname($ext));
    }
}
$d->close();
?>

Автор: arial 24.8.2004, 06:18
Цитата(gogle @ 23.8.2004, 23:21)
Да не секрет и тем более не вырезка "гланд через задний проход" smile.gif
Некоторые скрипты просто отсылают та 3 буквы банерокрутилки типа http://www.domain.com/ban.php , им подавай реальную картинку sad.gif
Поэтому я хочу через крон запустить этот скрипт , и пусть меняет мои нколичество баннеров по циклу через нное время.

Переименовывание файлов в баннерокрутилке - это вырезка гланд через задницу. Сделай правило в mod_rewrite, и у тебя всегда под именем some_image.gif будет прятаться скрипт, отдающий картинки по циклу. Тут тебе и реальная картинка будет.

Автор: gogle 24.8.2004, 11:39
Сделал так , 5 банеров , 3 просто удаляет а остальные 2 удачно переименовывает потом , еслиб без удаления , то былоб просто чудненько smile.gif

<?php

$path = '/home/site/public_html/ban1/';

function newname($ext) {
$words = "12345";
$newlen = 1;
$n = '';
for($i = 0; $i < $newlen; $i++) {
$n .= $words[rand(0, strlen($words) -1)];
}
return $n.'.'.$ext;
}

$d = dir($path);
while($f = $d->read()) {
if(filetype($path.$f) == 'file') {
$bname = basename($path.$f);
list(,$ext) = explode('.', $bname);
rename($path.$f, $path.newname($ext));
}
}
$d->close();
?>

Автор: gogle 24.8.2004, 11:56
2 arial :
имхо, чтоб добавить правило в mod_rewrite , наверное надо права иметь ?
А уменя их нет , ломать же сервер чтоб это все сделать , и есть вырезка гланд через задний проход , а если учесть , то что я ломать сервера неумею , то это вырезка гланд через задний проход тупым скальпелем в темной комнате smile.gif
Проще мне кажется заюзать такой скрипт , беда льши в том что он неюзабелен пока sad.gif

Автор: Ignat 24.8.2004, 12:27
Этот срипт дает один и тот же результат или каждый раз новый?

Автор: gogle 24.8.2004, 12:40
Каждый раз новый

Автор: Ignat 24.8.2004, 13:39
Угу, у тебя рандомизится имя.
Вот поправленный:
Код
<?php
$bandir = "/home/site/public_html/ban1/";

//==================

$d = dir($bandir);
$cname = "";
$tmp = "";
$tt = 1;
while (false !== ($ent = $d->read())) {
if ($ent != '.' && $ent != '..')
{
$fil = pathinfo($ent);
print_r($fil);
$fname = current(explode('.', $fil['basename']));
if ($fname == (int)$fname)
{
$nname = (int)$fname-1;
if ($nname!='0')
rename($bandir.$ent,$bandir.$nname.".".$fil['extension']);
else
{
rename($bandir.$ent,$bandir."tmp-".$fil['extension']);
$tmp = "tmp-".$fil['extension'];
}
if ($tt < (int)$fname)
$cname = $ent;
}
}
}
$d->close();
if ($cname!='')
rename($bandir.$tmp,$bandir.$cname);
?>

Автор: gogle 24.8.2004, 14:09
Игнат спасибо , это самый лучший вариант , и он делает все правильно , но при каждой сработке файл 1.jpg удалется вместо того чтобы переименовываться в конец очереди.
Подправь еще чуток пожалуйста smile.gif

Автор: Ignat 24.8.2004, 14:16
у меня не удаляется - проверял sad.gif
какие права на папку ban1?
Добавлено @ 14:17
ошибки какие-нибудь пишет?

Автор: gogle 24.8.2004, 14:20
права 777
файлы 644
у меня он удаляет файл 1.jpg далее переименовывает все остальные как и надо , но первый файл непоявляется в коце очереди под другим именем.
вот это выдает после сработки
Array ( [dirname] => . [basename] => 1.jpg [extension] => jpg ) Array ( [dirname] => . [basename] => 4.jpg [extension] => jpg ) Array ( [dirname] => . [basename] => 2.jpg [extension] => jpg ) Array ( [dirname] => . [basename] => 3.jpg [extension] => jpg )

Автор: Ignat 24.8.2004, 14:25
Непонятно...
Почему 4 идет сразу за 1...
Сделай файлам пакетное переименование со счетчиком...

Автор: gogle 24.8.2004, 14:30
Бр ,непонял , попроще пожалуйста , что сделать ?

Автор: Ignat 24.8.2004, 14:32
Групповое переименование файлов. Если нечем попробуй залить какие-нибудь другие файлы.
Добавлено @ 14:34
Попробуй еще так, что покажет?
Код
<?php
$bandir = "/home/site/public_html/ban1/";

//==================

$d = dir($bandir);
$cname = "";
$tmp = "";
$tt = 1;
while (false !== ($ent = $d->read())) {
if ($ent != '.' && $ent != '..')
{
$fil = pathinfo($ent);
print_r($fil);
$fname = current(explode('.', $fil['basename']));
if ($fname == (int)$fname)
{
$nname = (int)$fname-1;
if ($nname!='0')
echo rename($bandir.$ent,$bandir.$nname.".".$fil['extension']);
else
{
echo rename($bandir.$ent,$bandir."tmp-".$fil['extension']);
$tmp = "tmp-".$fil['extension'];
}
if ($tt < (int)$fname)
$cname = $ent;
}
}
}
$d->close();
if ($cname!='')
rename($bandir.$tmp,$bandir.$cname);
?>

Автор: gogle 24.8.2004, 14:43
Ну вобщем хоть и коряво но я решил проблему smile.gif
добавил файл 0.jpg , причем на халяву еще получился и счетчик показов smile.gif
Вобщем 0 файл нужно просто левую картинку , и при каждой сработке он ее переименовывает во все меньшее число -1,-2,-3, и.т.д ( счетчик smile.gif
Добавлено @ 14:49
При втором варианте выдало
Array ( [dirname] => . [basename] => 1.jpg [extension] => jpg ) 1Array ( [dirname] => . [basename] => 2.jpg [extension] => jpg ) 1Array ( [dirname] => . [basename] => 4.jpg [extension] => jpg ) 1Array ( [dirname] => . [basename] => 5.jpg [extension] => jpg ) 1Array ( [dirname] => . [basename] => 3.jpg [extension] => jpg ) 1
Но результат прежний первый ваюл удален.

Вобщем , моя корявая версия меня вполне устраивает , всем принявшим участие в этом топике , спасибо.

Тема закрыта.

Автор: Ignat 24.8.2004, 14:55
Цитата(gogle @ 24.8.2004, 15:43)
причем на халяву еще получился и счетчик показов

Только это не счетчик показов, а счетчик переименований.
так не должно работать.

Автор: arial 24.8.2004, 17:26
Цитата(gogle @ 24.8.2004, 12:56)
2 arial :
имхо, чтоб добавить правило в mod_rewrite , наверное надо права иметь ?
А уменя их нет , ломать же сервер чтоб это все сделать , и есть вырезка гланд через задний проход , а если учесть , то что я ломать сервера неумею , то это вырезка гланд через задний проход тупым скальпелем в темной комнате smile.gif
Проще мне кажется заюзать такой скрипт , беда льши в том что он неюзабелен пока sad.gif

Никаких прав ненадо, при условии, что пользуешься нормальным хостингом.
Просто в .htaccess пишешь:
Код
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^some_image.jpg$ banner.php [L]
Думаю в файле banner.php написать десять строк кода, циклически выдающего различные картинки сможешь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)