воскресенье, 5 сентября 2010 г.

[upload][php]тонкости. Или то, о чем мало пишут.

как это делается описано во многих местах, например
http://www.phpclub.ru/detail/article/upload
но есть 3 момента, из-за которых будут проблемы.
1) не забыть в форму задать в виде
enctype="multipart/form-data" action="/upload.php" method="post">
важный момент выделен жирным.

2) при создании каталога для хранения файлов нужно дать ему разрешение на все т.е.
chmod 777 uploaddir
3) существует заблуждение, что владельцем каталога должен быть пользователь, от имени которого работает apache или php. Нет! Владельцем каталога должен быть именно тот пользователь, который владеет скриптом.

Далее)
Как хранить ссылки на файлы, так чтоб их можно было скачать?
Это конечно интересный вопрос. Казалось бы, что может быть проще, записали в базу имя и вперед. Но, опять это дурацкое но)) Все я не пробовал проверять, но у меня возникают сомнения по поводу русских названий и пробелов. А если вспомнить кодировки и то, что хостинг обычно крутится на BSD или Linux, а большенство пользователей сидит на винде... Вобщем, универсальным решением я, для себя, выбрал перевод имен файлов в транслит. Вот такой замечательной функцией:


  1. <?php
  2. public function encodeS($st)
  3.     {
  4.         $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_","abvgdeeziyklmnoprstufh'iei");
  5.         $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_","ABVGDEEZIYKLMNOPRSTUFH'IEI");
  6.         $st=strtr($st," ","_");
  7.     // Затем - "многосимвольные".
  8.  
  9.        $st=strtr($st,
  10.                     array(
  11.                         "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
  12.                         "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
  13.                         "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
  14.                         "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
  15.                         "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
  16.                         )
  17.              );
  18.     // Возвращаем результат.
  19.        return $st;
  20.     }
  21. ?>

Комментариев нет:

Отправить комментарий