Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Существует ли файл?
 
 автор: JIEXA   (01.06.2005 в 22:49)   письмо автору
 
 

Вот мне нужно сделать такую вещь:
$name = "myfile_n.jpg";
тут проверяем существует ли такой файл, если существует, то добавляем к нему _n+1, и проверяем еслть ли такой. И так до бесконечности, пока файла myfile.php_n не будет.
Пример перебора:
myfile.jpg - существует
myfile_1.jpg - существует
myfile_2.jpg - существует
myfile_3.jpg - существует
myfile_4.jpg - НЕ существует

и тут записывается в переменную название файла, которого нету.
Дмую понятно объяснил? :)

   
 
 автор: isset   (01.06.2005 в 23:05)   письмо автору
 
   для: JIEXA   (01.06.2005 в 22:49)
 


<?
function check_file($file,$ext=".jpg",$n="")
{
  if(
file_exists($file.$n.$ext)) { ++$ncheck_file($file,$ext,"_".$n); }
  else {  
$not_exists $file.$n.$ext; }
}
check_file("myfile");
?>

Не проверял, но работать должно
[поправлено еще раз в 23:09]

   
 
 автор: Akira   (01.06.2005 в 23:48)   письмо автору
 
   для: 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"); 
?>

Может это только моя просьбо, но все таки я прошу комментировать такие скрипты. Ведь его читают не только те , кто просил его , но и другие люди ;) Например я =)

   
 
 автор: isset   (02.06.2005 в 00:00)   письмо автору
 
   для: Akira   (01.06.2005 в 23:48)
 

Может быть, но избыток комментариев только все портит. Не надо комментировать то, что ясно. Единственное конечно можно было прокомментировать строку check_file($file,$ext,"_".$n):

<?
check_file
($file,$ext,"_".$n); // Вызов функции по новой (рекурсия).
?>

Хотя тоже избыток )

   
 
 автор: isset   (02.06.2005 в 00:07)   письмо автору
 
   для: 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)) { ++$ncheck_file($file,$ext,"_".$n); }
  else {  
$not_exists $file.$n.$ext; }
}
check_file("myfile");
?> 

   
 
 автор: isset   (02.06.2005 в 00:20)   письмо автору
 
   для: 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; 

}
?>

   
 
 автор: Akira   (02.06.2005 в 00:25)   письмо автору
 
   для: 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:27)   письмо автору
 
   для: Akira   (02.06.2005 в 00:25)
 

Хоть убейте, но мне такие задачки решать интереснее, чем писать движок сайта :D

   
 
 автор: isset   (02.06.2005 в 00:38)   письмо автору
 
   для: Akira   (02.06.2005 в 00:27)
 

Кажется твое решение не подходит, в нем же даже нет функции проверяющей есть ли файл (file_exists). См. внимательнее вопрос.

При разработке проектов надо делить все на более мелкие задачи, а после чего собирать все вместе, тогда каждая часть будет интересная , ведь существует не одно решение задачи... :)

   
 
 автор: Akira   (02.06.2005 в 00:42)   письмо автору
 
   для: 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?

   
 
 автор: Akira   (02.06.2005 в 00:43)   письмо автору
 
   для: isset   (02.06.2005 в 00:38)
 

>При разработке проектов надо делить все на более мелкие
>задачи, а после чего собирать все вместе, тогда каждая часть
>будет интересная , ведь существует не одно решение задачи...
> :)
Велик риск того , что работать не будет ;)
Просто пример с которым я сталкивался: Банально имена переменный пересекались =Р

   
 
 автор: isset   (02.06.2005 в 00:49)   письмо автору
 
   для: Akira   (02.06.2005 в 00:43)
 

А что если задан файл $file = "myfile_2.jpg", и существует myfile_2.jpg и myfile_3.jpg.
Получится что myfile_3.jpg не существует...И почему "else exit;"? Это же убьет все что дальше...


Значит неправильно разделил задачу... В таких делах , как разделение задач, помогает ОО-подход.

   
 
 автор: Akira   (02.06.2005 в 00:54)   письмо автору
 
   для: 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:57)   письмо автору
 
   для: Akira   (02.06.2005 в 00:54)
 

Да можно проверять, есть ли файл с именем filename.
Ну например "не честный" юзер загрузил myfile_99999999.jpg ?
Перебором, что получиться? Ого-го!
Надо myfile изьять, _99999999 - удалить.
Если нет больше файлов с таким именем, то делаем так - myfile_1.jpg.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования