|
|
|
| Вот мне нужно сделать такую вещь:
$name = "myfile_n.jpg";
тут проверяем существует ли такой файл, если существует, то добавляем к нему _n+1, и проверяем еслть ли такой. И так до бесконечности, пока файла myfile.php_n не будет.
Пример перебора:
myfile.jpg - существует
myfile_1.jpg - существует
myfile_2.jpg - существует
myfile_3.jpg - существует
myfile_4.jpg - НЕ существует
и тут записывается в переменную название файла, которого нету.
Дмую понятно объяснил? :) | |
|
|
|
|
|
|
|
для: JIEXA
(01.06.2005 в 22:49)
| |
<?
function check_file($file,$ext=".jpg",$n="")
{
if(file_exists($file.$n.$ext)) { ++$n; check_file($file,$ext,"_".$n); }
else { $not_exists = $file.$n.$ext; }
}
check_file("myfile");
?>
|
Не проверял, но работать должно
[поправлено еще раз в 23:09] | |
|
|
|
|
|
|
|
для: isset
(01.06.2005 в 23:05)
| |
<?
function check_file($file,$ext=".jpg",$n="")
{
if(file_exists($file.$n.$ext)) # Если файл существует
{
++$n; # Прибовляем к его имени 1
check_file($file,$ext,"_".$n); # Запускаем по новой пока
}
else
{
$not_exists = $file.$n.$ext; # файла не будет существовать.
}
}
check_file("myfile");
?>
|
Может это только моя просьбо, но все таки я прошу комментировать такие скрипты. Ведь его читают не только те , кто просил его , но и другие люди ;) Например я =) | |
|
|
|
|
|
|
|
для: Akira
(01.06.2005 в 23:48)
| | Может быть, но избыток комментариев только все портит. Не надо комментировать то, что ясно. Единственное конечно можно было прокомментировать строку check_file($file,$ext,"_".$n):
<?
check_file($file,$ext,"_".$n); // Вызов функции по новой (рекурсия).
?>
|
Хотя тоже избыток ) | |
|
|
|
|
|
|
|
для: isset
(02.06.2005 в 00:00)
| |
<?
/**
* check_file
*
* Finding of the nonexistent file file_N
*
* @static
* @return none
* @param string $file Filename
* @param string $ext File extension
* @param int $n Number N
*/
function check_file($file,$ext=".jpg",$n="")
{
if(file_exists($file.$n.$ext)) { ++$n; check_file($file,$ext,"_".$n); }
else { $not_exists = $file.$n.$ext; }
}
check_file("myfile");
?>
|
| |
|
|
|
|
|
|
|
для: JIEXA
(01.06.2005 в 22:49)
| | Еще одно решение:
<?
for($i=0;;$i++)
{
if($i == 0) $file = "myfile.jpg";
else $file = "myfile_{$i}.jpg";
if(!file_exists($file))
{
$not_exists = $file; break;
}
}
?>
|
| |
|
|
|
|
|
|
|
для: JIEXA
(01.06.2005 в 22:49)
| |
<?
$file = "myfile.jpg"; # Имя файла любое
$exe = strrchr($file, '.'); /* его расширение */
##############
$num = substr(strrchr($file, '_'),1,1); # Если файл содержит _n,где n целое число, то $num = n.
if (is_numeric($num))
{ $filename = substr($file,0,strpos($file,"_")); /* имя файла без расширения */
$file = $filename."_".($num+1).$exe; # Наш файл с именем счетчиком
}
else
{
$filename = substr($file,0,strpos($file,".")); /* имя файла без расширения */
$file=$filename."_1".$exe;# Нет следовательно прибавляем к файлу 1.
}
?>
|
И заметьте без перебора ;) | |
|
|
|
|
|
|
|
для: Akira
(02.06.2005 в 00:25)
| | Хоть убейте, но мне такие задачки решать интереснее, чем писать движок сайта :D | |
|
|
|
|
|
|
|
для: Akira
(02.06.2005 в 00:27)
| | Кажется твое решение не подходит, в нем же даже нет функции проверяющей есть ли файл (file_exists). См. внимательнее вопрос.
При разработке проектов надо делить все на более мелкие задачи, а после чего собирать все вместе, тогда каждая часть будет интересная , ведь существует не одно решение задачи... :) | |
|
|
|
|
|
|
|
для: isset
(02.06.2005 в 00:38)
| |
<?
$file = "myfile.jpg"; # Имя файла любое
if (file_exists("$file"))
{
$exe = strrchr($file, '.'); /* его расширение */
##############
$num = substr(strrchr($file, '_'),1,1); # Если файл содержит _n,где n целое число, то $num = n.
if (is_numeric($num))
{ $filename = substr($file,0,strpos($file,"_")); /* имя файла без расширения */
$file = $filename."_".($num+1).$exe; # Наш файл с именем счетчиком
}
else
{
$filename = substr($file,0,strpos($file,".")); /* имя файла без расширения */
$file=$filename."_1".$exe;# Нет следовательно прибавляем к файлу 1.
}
}
else exit;
?>
|
Я думал это очевидно =) И все таки такой подход мне кажеться лучше. Ведь перебор всегда "ест" ресурсы. А если файлов за 1000? | |
|
|
|
|
|
|
|
для: isset
(02.06.2005 в 00:38)
| | >При разработке проектов надо делить все на более мелкие
>задачи, а после чего собирать все вместе, тогда каждая часть
>будет интересная , ведь существует не одно решение задачи...
> :)
Велик риск того , что работать не будет ;)
Просто пример с которым я сталкивался: Банально имена переменный пересекались =Р | |
|
|
|
|
|
|
|
для: Akira
(02.06.2005 в 00:43)
| | А что если задан файл $file = "myfile_2.jpg", и существует myfile_2.jpg и myfile_3.jpg.
Получится что myfile_3.jpg не существует...И почему "else exit;"? Это же убьет все что дальше...
Значит неправильно разделил задачу... В таких делах , как разделение задач, помогает ОО-подход. | |
|
|
|
|
|
|
|
для: isset
(02.06.2005 в 00:49)
| | Этот код для "
Пример перебора:
myfile.jpg - существует
myfile_1.jpg - существует
myfile_2.jpg - существует
myfile_3.jpg - существует
myfile_4.jpg - НЕ существует"
В принципе его переделать просто. Это так на скорую руку перед сном.
Перебор если файлов мало.
exit можно не использовать =) | |
|
|
|
|
|
|
|
для: Akira
(02.06.2005 в 00:54)
| | Да можно проверять, есть ли файл с именем filename.
Ну например "не честный" юзер загрузил myfile_99999999.jpg ?
Перебором, что получиться? Ого-го!
Надо myfile изьять, _99999999 - удалить.
Если нет больше файлов с таким именем, то делаем так - myfile_1.jpg. | |
|
|
|