| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| Да не секрет и тем более не вырезка "гланд через задний проход" Некоторые скрипты просто отсылают та 3 буквы банерокрутилки типа http://www.domain.com/ban.php , им подавай реальную картинку Поэтому я хочу через крон запустить этот скрипт , и пусть меняет мои нколичество баннеров по циклу через нное время. |
| Автор: gogle 23.8.2004, 22:37 |
| Блин ну ребята , скрипт то простой для програмиста , помогите пожалуйста , надо срочно !!! |
| Автор: IZ@TOP 23.8.2004, 22:52 | ||
Попробуй так:
|
| Автор: arial 24.8.2004, 06:18 | ||
Переименовывание файлов в баннерокрутилке - это вырезка гланд через задницу. Сделай правило в mod_rewrite, и у тебя всегда под именем some_image.gif будет прятаться скрипт, отдающий картинки по циклу. Тут тебе и реальная картинка будет. |
| Автор: gogle 24.8.2004, 11:39 |
| Сделал так , 5 банеров , 3 просто удаляет а остальные 2 удачно переименовывает потом , еслиб без удаления , то былоб просто чудненько <?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 , наверное надо права иметь ? А уменя их нет , ломать же сервер чтоб это все сделать , и есть вырезка гланд через задний проход , а если учесть , то что я ломать сервера неумею , то это вырезка гланд через задний проход тупым скальпелем в темной комнате Проще мне кажется заюзать такой скрипт , беда льши в том что он неюзабелен пока |
| Автор: Ignat 24.8.2004, 12:27 |
| Этот срипт дает один и тот же результат или каждый раз новый? |
| Автор: gogle 24.8.2004, 12:40 |
| Каждый раз новый |
| Автор: Ignat 24.8.2004, 13:39 | ||
| Угу, у тебя рандомизится имя. Вот поправленный:
|
| Автор: gogle 24.8.2004, 14:09 |
| Игнат спасибо , это самый лучший вариант , и он делает все правильно , но при каждой сработке файл 1.jpg удалется вместо того чтобы переименовываться в конец очереди. Подправь еще чуток пожалуйста |
| Автор: Ignat 24.8.2004, 14:16 |
| у меня не удаляется - проверял какие права на папку 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 Попробуй еще так, что покажет?
|
| Автор: gogle 24.8.2004, 14:43 |
| Ну вобщем хоть и коряво но я решил проблему добавил файл 0.jpg , причем на халяву еще получился и счетчик показов Вобщем 0 файл нужно просто левую картинку , и при каждой сработке он ее переименовывает во все меньшее число -1,-2,-3, и.т.д ( счетчик Добавлено @ 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 | ||
Только это не счетчик показов, а счетчик переименований. так не должно работать. |
| Автор: arial 24.8.2004, 17:26 | ||||
Никаких прав ненадо, при условии, что пользуешься нормальным хостингом. Просто в .htaccess пишешь:
|