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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: артист-трек.mp3 в /артист/трек/артист-трек.mp3
D0Gmatist
Отправлено: 19 Июля, 2013 - 11:38:31
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2012  


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $sound_name = "артист-трек.mp3" ;
  3. preg_match('/([^-]*)-([^\.]*)\.(mp3$)/',$sound_name,$mass) ;
  4. $artist = $mass[1] ; // артист
  5. $track = $mass[2] ; // трек
  6.  
  7. $sound_name_sleh=str_replace(' ', '_', $sound_name) ;
  8.  
  9. if($error_flag == 0) {
  10.         $DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'] ;
  11.         $upfile = getcwd() ."/sound/". $sound_name_sleh ;
  12.         if ($_FILES['myfile']['tmp_name']) {
  13.  
  14.                 //Если не удалось загрузить файл
  15.                 if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile)) {
  16.                         echo "$error_by_file" ;
  17.                         exit ;
  18.                 }
  19.  
  20.         } else {
  21.                 echo 'Проблема: возможна атака через загрузку файла. ' ;
  22.                 echo $_FILES['myfile']['name'] ;
  23.                 exit ;
  24.         }
  25.  
  26.  
  27.         $q = "INSERT INTO fpsd_sound (artist, track, url, size, data) VALUES ('$artist', '$track', '$sound_name_sleh', '$myfile_size', NOW())" ;
  28.         $query = mysql_query($q) ;
  29.  
  30.         // Данные успешно внесены в базу данных, выводим сообщение
  31.         if ($query == 'true') {
  32.                 echo  "<div class='text'>". $artist ." с треком ". $track ." успешно добавлена на сервер!</div>";
  33.         } else {
  34.                 // В противном случае, выводим ошибку при добавлении в базу данных
  35.                 echo "$error_by_mysql";
  36.         }
  37. }
  38.  


Как можно реализовать создание двух папок
артист/ (у брав все недопустимые символы и с правами CHMOD 777)
трек/ (у брав все недопустимые символы и с правами CHMOD 777)
и залить туда файл

Заранее спасибо!!!
 
 Top
Волк
Отправлено: 19 Июля, 2013 - 11:56:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 149
Дата рег-ции: Окт. 2007  


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




папку можно создать с помощью команды mkdir()


-----
Таран - оружие героев!
 
 Top
soffrick
Отправлено: 19 Июля, 2013 - 11:56:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


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




PHP:
скопировать код в буфер обмена
  1. $author = preg_replace('/bad_symbols/', '', $author);
  2. $track = preg_replace('/bad_symbols/', '', $track);
  3.  
  4. mkdir($author, 0777);
  5. mkdir($author . '/' . $track, 0777); // DIRECTORY_SEPARATOR | PATH_SEPARATOR | DS ...
  6. copy($pathOfFile, $author . '/' . $track . '.mp3');


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
LIME
Отправлено: 19 Июля, 2013 - 12:02:57
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




bad_symbols тут нет смысла вырезать...так-как имя файла не может содержать недопустимых символов
можно вырезать "/" навсякий
0777 по умолчанию стоит
вместо copy лучше move_uploaded_file как у ТС
и должны быть права на запись у родительской папки
 
 Top
D0Gmatist
Отправлено: 19 Июля, 2013 - 13:35:50
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2012  


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




Помогите пожалуйста... не могу сообразить как реализовать создание папок.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         //подключение к базе данных
  3.         include ("bd.php") ;
  4.  
  5.         if (isset($_POST['sound']))
  6.  
  7.         // Если поле выбора картинки не пустое - закачиваем её на сервер
  8.         $sound_dir = "sound/" ; // Директория трека
  9.         $sound_name = basename($_FILES['myfile']['name']) ; // Полное имя файла
  10.  
  11.  
  12.         // Текст ошибок
  13.         $error_by_mysql = "<label class=\"label\">Ошибка при добавлении данных в базу</span>" ;
  14.         $error_by_file = "<label class=\"label\">Невозможно загрузить файл в директорию. Возможно её не существует</span>" ;
  15.  
  16.  
  17.         // Начало
  18.         if(isset($_FILES["myfile"])) {
  19.                 $myfile = $_FILES["myfile"]["tmp_name"] ;
  20.                 $myfile_name = $_FILES["myfile"]["name"] ;
  21.                 $myfile_size = $_FILES["myfile"]["size"] ;
  22.                 $myfile_type = $_FILES["myfile"]["type"] ;
  23.                 $error_flag = $_FILES["myfile"]["error"] ;
  24.  
  25.                 preg_match('/([^-]*) - ([^\.]*)\.(mp3$)/',$sound_name,$mass) ; // вырезаем расширение и разбиваем на артист (-) трек
  26.                 $artist = $mass[1] ; // артист
  27.                 $track = $mass[2] ; // трек
  28.                 $farmat = $mass[3] ; // рсширение mp3 (на всякий случай)
  29.                 $farmat = ".".$farmat ;
  30.  
  31.                 $allowed_filetypes = array('.mp3'); // Здесь мы перечисляем допустимые типы файлов
  32.  
  33.                 if(!in_array($farmat,$allowed_filetypes))
  34.                 die('Данный тип файла не поддерживается. Допцскаются файлы только с форматом [.mp3]') ;
  35.  
  36.                 $artist_dr = str_replace(" ", "_", $artist) ; // создаём имя для дериктории артист
  37.                 $track_dr = str_replace(" ", "_", $track) ; // создаём имя для дериктории артист
  38.  
  39.                 echo $artist_dr ."_-_". $track_dr, $farmat ;
  40.  
  41.                 $sound_name_sl=str_replace(' ', '_', $sound_name) ; // создаём имя для трека
  42.                 $sound_name_sl=str_replace(',', '', $sound_name) ; // убераем запятую
  43.  
  44.                 // Если ошибок не было
  45.                 if($error_flag == 0) {
  46.                         $DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'] ;
  47.                         $upfile = getcwd() ."/sound/". $sound_name_sl ;
  48.                         if ($_FILES['myfile']['tmp_name']) {
  49.  
  50.                                 //Если не удалось загрузить файл
  51.                                 if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile)) {
  52.                                         echo "$error_by_file" ;
  53.                                         exit ;
  54.                                 }
  55.  
  56.                         } else {
  57.                                 echo 'Проблема: возможна атака через загрузку файла. ' ;
  58.                                 echo $_FILES['myfile']['name'] ;
  59.                                 exit ;
  60.                         }
  61.  
  62.                         $q = "INSERT INTO fpsd_sound (artist, track, url, size, data) VALUES ('$artist', '$track', '$sound_name_sl', '$myfile_size', NOW())" ;
  63.                         $query = mysql_query($q) ;
  64.  
  65.                         // Данные успешно внесены в базу данных, выводим сообщение
  66.                         if ($query == 'true') {
  67.                                 echo  "<div class='text'>". $artist ." с треком ". $track ." успешно добавлена на сервер!</div>";
  68.                                 echo "<div> <a href='add_sound.php' class='add_sound'>ДОБАВИТЬ ЕЩЕ ТРЕК</a> <a href='index.php' class='add_sound'>НА ГЛАВНУЮ</a></div>";
  69.                         } else {
  70.                                 // В противном случае, выводим ошибку при добавлении в базу данных
  71.                                 echo "$error_by_mysql";
  72.                         }
  73.                 }
  74.                 elseif ($myfile_size == 0) {
  75.                         echo "<label class='label'>Трек не выбрана!<br><br>Вернитесь и выберите!</label><br><a href='add_sound.php' class='add_sound'>ВЫБРАТЬ ТРЕК</a>";
  76.                 }
  77.         }
  78. ?>
 
 Top
Мелкий Супермодератор
Отправлено: 19 Июля, 2013 - 13:54:33
Post Id



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


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


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




LIME пишет:
bad_symbols тут нет смысла вырезать...так-как имя файла не может содержать недопустимых символов

Ага. Почитайте чего-нибудь на тему "null byte filename upload". Ныне эта дырка закрыта, правда. Ну так есть остальные 255 символов. Для SQL-инъекции дальше по коду, например, хватит точно.

D0Gmatist пишет:
как реализовать создание папок.

Так mkdir


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 19 Июля, 2013 - 14:11:19
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




Мелкий пишет:
Ну так есть остальные 255 символов.
ну и что? ну пришлют имя из символов не разрешенных для имен файлов(причем это возможно только целенаправленным действием)...папка не создастся...файл не сохранится
Мелкий пишет:
Для SQL-инъекции дальше по коду
а это вообще причем?...тут уже другая песня - "Экранируем спецсимволы"
какие есть дырки?
 
 Top
Мелкий Супермодератор
Отправлено: 19 Июля, 2013 - 14:30:04
Post Id



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


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


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




LIME пишет:
папка не создастся...файл не сохранится

Уверен, что ОС не догадается как-нибудь странно такое имя обработать? Или сам PHP как-нибудь нетривиально воспримет, как та ошибка с \0.
Прислать файл не в той кодировке - создадутся как миленькие. Но чехарда кодировок в ФС счастья ещё никому не приносила.

LIME пишет:
а это вообще причем?

А это для примера, глаз зацепился.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 19 Июля, 2013 - 14:39:46
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




уверенности нет...потому в своих скриптах имена сам назначаю
теоретический интерес
 
 Top
soffrick
Отправлено: 19 Июля, 2013 - 14:42:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


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




а парень то серьезный ....
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query($q) ;
  2.  
  3.                         // Данные успешно внесены в базу данных, выводим сообщение
  4.                         if ($query == 'true')

(Добавление)
+ sql-inj detected ...

(Отредактировано автором: 19 Июля, 2013 - 14:42:54)



-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
D0Gmatist
Отправлено: 19 Июля, 2013 - 15:00:28
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2012  


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




soffrick пишет:
а парень то серьезный ....

Не понял ... Растерялся

Я так понял мне надо сделать что то такое? (скорее всего я делаю не правильно) О_о
PHP:
скопировать код в буфер обмена
  1.  
  2.                 $artist_dr = str_replace(" ", "_", $artist) ; // создаём имя для директории артист
  3.                 $track_dr = str_replace(" ", "_", $track) ; // создаём имя для директории артист
  4.  
  5.                 mkdir("/sound/". $artist_dr, 0777) ;
  6.                 mkdir("/sound/". $artist_dr, $track_dr, 0777) ;
  7.  
 
 Top
LIME
Отправлено: 19 Июля, 2013 - 15:03:44
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




PHP:
скопировать код в буфер обмена
  1. mkdir("/sound/". $artist_dr.'/'.$track_dr, 0777);
 
 Top
D0Gmatist
Отправлено: 19 Июля, 2013 - 15:05:48
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2012  


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




Да да .. точно .. прозивал )
Но куда мне это вставить что бы оно сработало ... просто директории не создаются...
или пока я не укажу что бы туда шёл файл директории создаваться не будут?

(Отредактировано автором: 19 Июля, 2013 - 15:06:07)

 
 Top
soffrick
Отправлено: 19 Июля, 2013 - 15:06:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


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




LIME пишет:
PHP:
скопировать код в буфер обмена
  1. mkdir("/sound/". $artist_dr.'/'.$track_dr, 0777);

No such file or directory : dir $artist_dr not found
(Добавление)
PHP:
скопировать код в буфер обмена
  1. mkdir('sound/doctor_p/daily_dose_of_dubstep.mp3');

если хоть одной из 2ух папок не будет то ошибко


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
LIME
Отправлено: 19 Июля, 2013 - 15:10:04
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




soffrick откудава знаешь?
D0Gmatist адрес укажи полностью от корня или относительно исполняемого скрипта(начально запущенного а не подключенного)
на данный момент есть попытка создания директории в папке sound в корне файловой системы
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB