Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Существование файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Прозьба подправить код
Crazy_Maks
Отправлено: 05 Марта, 2011 - 14:29:40
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Привет всем! Может я не в ту тему залез. Ребят, ну извиняйте. Че то у меня не получается проверить существование файла с помощью file_exist, вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // функция превода текста с кириллицы в траслит
  3.     function encodestring($st)
  4.     {
  5.  
  6.     $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
  7.  
  8.     "abvgdeeziyklmnoprstufh'iei");
  9.  
  10.     $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
  11.  
  12.     "ABVGDEEZIYKLMNOPRSTUFH'IEI");
  13.  
  14.       $st=strtr($st,
  15.  
  16.          array(
  17.  
  18.             "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
  19.  
  20.             "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
  21.  
  22.             "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
  23.  
  24.             "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
  25.  
  26.             "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
  27.  
  28.                )
  29.  
  30.              );
  31.     return $st;
  32.   }
  33.  
  34. $allowed_filetypes = array('.txt','.jpg','.gif','.bmp','.png',); // Здесь мы перечисляем допустимые типы файлов
  35.  
  36. $max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).
  37.  
  38. $upload_path = '/public_html/upload/'; // Место, куда будут загружаться файлы (в данном случае это папка 'upload').
  39.  
  40. $name_file = $_FILES['filename']['name'];// В переменную $name_file заносим точное имя файла (включая расширение).
  41.  
  42. $ext = substr($name_file, strpos($name_file,'.'), strlen($name_file)-1); // В переменную $ext заносим расширение загруженного файла.
  43.  
  44. if(!in_array($ext,$allowed_filetypes))// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.
  45. die('Данный тип файла не поддерживается.');
  46.  
  47. if(filesize($_FILES['filename']['tmp_name']) > $max_filesize)// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.
  48. die('Фаил слишком большой.');
  49.  
  50. if (file_exists("$upload_path/$z"))//ПОЧЕМУ НЕ РАБОТАЕТ!!!!
  51. die("Файл уже существует");
  52.  
  53. $z = encodestring($name_file); //Работает
  54.  
  55. $uploadfile = $upload_path.$z;// ПЕРЕМЕННЫЕ МЕНЯЮТСЯ МЕСТАМИ
  56.  
  57. if(copy($_FILES["filename"]["tmp_name"],"/public_html/upload/".$z)) // Копирование файла из временной папки на сервер
  58. {
  59. echo 'Ваш фаил успешно загружен ';
  60. }
  61. else
  62. {
  63. echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
  64. }
  65. ?>


Отредактировано модератором: JustUserR, 06 Марта, 2011 - 12:09:06
Обрамил PHP-код в соответствующий BB-тег
 
 Top
garvey
Отправлено: 05 Марта, 2011 - 14:35:36
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Вы думаете кто-то будет разбираться в этом ужасном коде? Отформатируйте и включите в php-bb-теги.
 
 Top
Crazy_Maks
Отправлено: 05 Марта, 2011 - 14:41:11
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




garvey пишет:
Вы думаете кто-то будет разбираться в этом ужасном коде? Отформатируйте и включите в php-bb-теги.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // функция превода текста с кириллицы в траслит
  4.     function encodestring($st)
  5.     {
  6.  
  7.     $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
  8.  
  9.     "abvgdeeziyklmnoprstufh'iei");
  10.  
  11.     $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
  12.  
  13.     "ABVGDEEZIYKLMNOPRSTUFH'IEI");
  14.  
  15.       $st=strtr($st,
  16.  
  17.          array(
  18.  
  19.             "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
  20.  
  21.             "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
  22.  
  23.             "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
  24.  
  25.             "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
  26.  
  27.             "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
  28.  
  29.                )
  30.  
  31.              );
  32.     return $st;
  33.   }
  34.  
  35. $allowed_filetypes = array('.txt','.jpg','.gif','.bmp','.png',); // Здесь мы перечисляем допустимые типы файлов
  36.  
  37. $max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).
  38.  
  39. $upload_path = '/public_html/upload/'; // Место, куда будут загружаться файлы (в данном случае это папка 'upload').
  40.  
  41. $name_file = $_FILES['filename']['name'];// В переменную $name_file заносим точное имя файла (включая расширение).
  42.  
  43. $ext = substr($name_file, strpos($name_file,'.'), strlen($name_file)-1); // В переменную $ext заносим расширение загруженного файла.
  44.  
  45. if(!in_array($ext,$allowed_filetypes))// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.
  46. die('Данный тип файла не поддерживается.');
  47.  
  48. if(filesize($_FILES['filename']['tmp_name']) > $max_filesize)// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.
  49. die('Фаил слишком большой.');
  50.  
  51. if (file_exists("$upload_path/$z"))//ПОЧЕМУ НЕ РАБОТАЕТ!!!!
  52. die("Файл уже существует");
  53.  
  54. $z = encodestring($name_file); //Работает
  55.  
  56. $uploadfile = $upload_path.$z;// ПЕРЕМЕННЫЕ МЕНЯЮТСЯ МЕСТАМИ
  57.  
  58. if(copy($_FILES["filename"]["tmp_name"],"/public_html/upload/".$z)) // Копирование файла из временной папки на сервер
  59. {
  60. echo 'Ваш фаил успешно загружен ';
  61. }
  62. else
  63. {
  64. echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
  65. }
  66. ?>
  67.  
  68.  
 
 Top
garvey
Отправлено: 05 Марта, 2011 - 14:50:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)





1. Не записывайте так строки. Сделайте так: $upload_path . '/' . $z
2. Что конкретно не работает? Выдает какую-то ошибку. Или срабатывает ваш die()?
3. Почему переменная $z определяется после ее использования?
 
 Top
Crazy_Maks
Отправлено: 05 Марта, 2011 - 15:01:08
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




garvey пишет:
1. Не записывайте так строки. Сделайте так: $upload_path . '/' . $z
2. Что конкретно не работает? Выдает какую-то ошибку. Или срабатывает ваш die()?
3. Почему переменная $z определяется после ее использования?


Постоянно срабатывает die();
 
 Top
garvey
Отправлено: 05 Марта, 2011 - 15:01:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




А остальные мои пункты вы не проверили?
 
 Top
Crazy_Maks
Отправлено: 05 Марта, 2011 - 15:04:40
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




garvey пишет:
А остальные мои пункты вы не проверили?


1 написал как Вы подсказали,2 выводит постоянно die 3-про переменную че то не пойму
 
 Top
garvey
Отправлено: 05 Марта, 2011 - 15:16:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1. if (file_exists("$upload_path/$z"))
  2. die("Файл уже существует");
  3. $z = encodestring($name_file);

Вот ваш код. Вы сразу проверяете на наличие какого-то файла, название которого определяете после этой самой проверки. Т.е. на момент проверки $z нет. И в функцию file_exists попадает лишь директория. Т.к. директория у вас уже есть, file_exists возвращает true.
 
 Top
Crazy_Maks
Отправлено: 05 Марта, 2011 - 15:18:56
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




garvey пишет:
PHP:
скопировать код в буфер обмена
  1. if (file_exists("$upload_path/$z"))
  2. die("Файл уже существует");
  3. $z = encodestring($name_file);

Вот ваш код. Вы сразу проверяете на наличие какого-то файла, название которого определяете после этой самой проверки. Т.е. на момент проверки $z нет. И в функцию file_exists попадает лишь директория. Т.к. директория у вас уже есть, file_exists возвращает true.

PHP:
скопировать код в буфер обмена
  1.  
  2. 51.if (file_exists("$upload_path/$z"))
  3. 52.die("Файл уже существует");
  4. 53.
  5. 54.$z = encodestring($name_file); //ЗАРАБОТАЛО КОГДА МЕСТАМИ ПОМЕНЯЛ
  6.  
  7.  

(Добавление)
ГОТОВОЕ РЕШЕНИЕ,СПАСИБО ЗА ПОМОЩЬ!!!
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // функция превода текста с кириллицы в траслит
  4.     function encodestring($st)
  5.     {
  6.  
  7.     $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
  8.  
  9.     "abvgdeeziyklmnoprstufh'iei");
  10.  
  11.     $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
  12.  
  13.     "ABVGDEEZIYKLMNOPRSTUFH'IEI");
  14.  
  15.       $st=strtr($st,
  16.  
  17.          array(
  18.  
  19.             "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
  20.  
  21.             "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
  22.  
  23.             "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
  24.  
  25.             "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
  26.  
  27.             "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
  28.  
  29.                )
  30.  
  31.              );
  32.     return $st;
  33.   }
  34.  
  35. $allowed_filetypes = array('.txt','.jpg','.gif','.bmp','.png',); // Здесь мы перечисляем допустимые типы файлов
  36.  
  37. $max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).
  38.  
  39. $upload_path = '/public_html/upload/'; // Место, куда будут загружаться файлы (в данном случае это папка 'upload').
  40.  
  41. $name_file = $_FILES['filename']['name'];// В переменную $name_file заносим точное имя файла (включая расширение).
  42.  
  43. $ext = substr($name_file, strpos($name_file,'.'), strlen($name_file)-1); // В переменную $ext заносим расширение загруженного файла.
  44.  
  45. if(!in_array($ext,$allowed_filetypes))// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.
  46. die('Данный тип файла не поддерживается.');
  47.  
  48. if(filesize($_FILES['filename']['tmp_name']) > $max_filesize)// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.
  49. die('Фаил слишком большой.');
  50.  
  51. $z = encodestring($name_file); //Работает
  52.  
  53. if (file_exists($upload_path.'/'.$z))
  54. die("Файл уже существует");
  55.  
  56. $uploadfile = $upload_path.$z;// ПЕРЕМЕННЫЕ МЕНЯЮТСЯ МЕСТАМИ
  57.  
  58. if(copy($_FILES["filename"]["tmp_name"],"/public_html/upload/".$z)) // Копирование файла из временной папки на сервер
  59. {
  60. echo 'Ваш фаил успешно загружен ';
  61. }
  62. else
  63. {
  64. echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
  65. }
  66. ?>
  67.  
  68.  
 
 Top
garvey
Отправлено: 05 Марта, 2011 - 16:08:36
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Всегда пожалуйста. Следующий раз будьте внимательней)
 
 Top
ALEN
Отправлено: 05 Марта, 2011 - 16:20:23
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Crazy_Maks
А есть смысл в таком принципиально сложном способе создания имени файла?
Почему нельзя например сделать так:
PHP:
скопировать код в буфер обмена
  1. rand(100000,999999).'-'.time().'-'.base_encode($_FILES["filename"]["name"]);

time - позволит всегда узнать когда был загружен файл
base_encode - начальное имя файла всегда можно будет вытащить
rand - поставит последнюю точку в создании уникального имени файла

100% что такое имя больше никогда не попадется на твоем сервере, т.к. чтоб это произошло, rand должен отдать в одну и ту же секунду в разных случая разные имена, да еще и файл один и тот же должен загрузится к этой секунде - в общем не реально. А мороки в 100500 раз меньше!
 
 Top
JustUserR
Отправлено: 06 Марта, 2011 - 12:12:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ALEN пишет:
А есть смысл в таком принципиально сложном способе создания имени файла?
Осуществление использование формата идентификаторов файлов с включением поддержки оригинальным региональных элементов, в действительности обеспечениет усложнение переносимости PHP-приложения относительно используемой конфигурации ОС и web-сервера, а также требует проведение сопоставление оригинальной кодовой таблицы и уровня элементного трактования для передаваемых информационных полей в HTTP-заголовках, и локальной форме хранения объекта в слое данных и параметрах обработки строковых элементов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ALEN
Отправлено: 06 Марта, 2011 - 12:48:49
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




JustUserR
Такое ощущение, что мой пост не прочел
 
 Top
Мелкий Супермодератор
Отправлено: 06 Марта, 2011 - 12:56:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




ALEN пишет:
100% что такое имя больше никогда не попадется на твоем сервере, т.к. чтоб это произошло, rand должен отдать в одну и ту же секунду в разных случая разные имена, да еще и файл один и тот же должен загрузится к этой секунде - в общем не реально.

И вариант для наркоманов - перед записью файлов ещё и проверить, правда ли такого имени файла нету через file_exists.
PHP:
скопировать код в буфер обмена
  1. do {
  2. $filename = rand(100000,999999).'-'.time().'-'.base_encode($_FILES["filename"]["name"]);
  3. } while(file_exists($filename));


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 06 Марта, 2011 - 13:12:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ALEN пишет:
JustUserR Такое ощущение, что мой пост не прочел
Указанная в рассматриваемом сообщении сентенция в действительности является подтверждением вашего комментария, и осуществляет описание дополнительных факторов, в силу существования которых предполагаемое решения является оптимальным


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB