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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Существует ли файл?

Сообщения:  [1-10]   [11-14] 

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

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

   
 
 автор: 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 можно не использовать =)

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

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

   
 
 автор: 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?

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

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

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

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

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

   
 
 автор: 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.
    
}
?>

И заметьте без перебора ;)

   
 
 автор: 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; 

}
?>

   
 
 автор: 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");
?> 

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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