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
Форумы портала PHP.SU :: Версия для печати :: upload
Форумы портала PHP.SU » » Работа с файловой системой и файлами » upload

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

1. Demon1341 - 19 Декабря, 2011 - 13:30:25 - перейти к сообщению
Добрый день!
Вообщем есть простенький скрипт по аплоду файлов на сервер:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (isset($_GET['id'])) {$id =$_GET['id']; }
  3. if($_FILES["filename"]["size"] > 1024*3*1024)
  4.    {
  5.      echo ("Размер файла превышает три мегабайта");
  6.      exit;
  7.    }
  8. $dir = './upload/user/'.$_SESSION['login'].'/';
  9. mkdir($dir);
  10. $dump = "\r\n\r\n\r\n".print_r($GLOBALS, true);
  11. $f = fopen($dir.'__dump.txt', 'a');
  12. fwrite($f, $dump);
  13. fclose($f);
  14. if(count($_FILES)){
  15. foreach($_FILES as $key=>$value){
  16. $tmp = $value['tmp_name'];
  17. $name = $value['name'];
  18. echo move_uploaded_file($tmp, $dir.$name);
  19. }
  20. echo("Файл загружен");
  21. }else
  22. {
  23.  echo("Ошибка загрузки файла");
  24.    }
  25. ?>

При выгрузке он создает в каталоге /upload/user/ папку с ником зарегистрированного пользователя и грузит файл в неё, но я никак не могу разобраться в двух нужных функциях.
При повторной загрузке файла пользователем, который уже раньше загружал файл скрипт ругается "Warning: mkdir() [function.mkdir]: File exists in ... on line 10", т.к. в начале создается папка, которая уже создалась при первой выгрузке, тут надо какое то условие прописать, что-бы шла проверка создана директория с ником пользователя или нет, т.е. просто что-бы скрипт знал, что заново создавать не надо, тогда и ругаться не будет.
Так же хотел сделать сравнение имен файлов, что-бы не загружались дубли, но что то не получилось.
Пробывал через file_exists(), но что то не выходит.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $name = '$name';
  3.  
  4. if (file_exists($name)) {
  5.     echo "Файл $name существует";
  6. ?>
2. OrmaJever - 19 Декабря, 2011 - 13:38:29 - перейти к сообщению
is_dir() ?
3. DeepVarvar - 19 Декабря, 2011 - 14:26:25 - перейти к сообщению
Папку надо создавать во время регистрации, а не загрузки картинок.
Или вы сами по жизни шнурки на бегу завязываете?
4. Demon1341 - 19 Декабря, 2011 - 20:24:48 - перейти к сообщению
OrmaJever пишет:

Она же определяет является является ли файл дерикторией, а мне надо проверять по имени файлы на повтор и если такое имя файла уже есть в папке на сервере, то отказывал юзеру в загрузке.
С проблемой с ошибкой при повторном аплоде юзером, который уже выгружал файл разобрался.
Действительно проще было сделать создание папки при регистрации, так и сделал.
5. Bio man - 19 Декабря, 2011 - 20:34:39 - перейти к сообщению
быть может scandir() и обход со сравнением в цикле?
6. OrmaJever - 19 Декабря, 2011 - 20:46:33 - перейти к сообщению
Bio man пишет:
Она же определяет является является ли файл дерикторией, а мне надо проверять по имени файлы на повтор и если такое имя файла уже есть в папке на сервере, то отказывал юзеру в загрузке.

А что тут написано?
OrmaJever пишет:
При повторной загрузке файла пользователем, который уже раньше загружал файл скрипт ругается "Warning: mkdir() [function.mkdir]: File exists in ... on line 10", т.к. в начале создается папка, которая уже создалась при первой выгрузке, тут надо какое то условие прописать, что-бы шла проверка создана директория с ником пользователя или нет, т.е. просто что-бы скрипт знал, что заново создавать не надо, тогда и ругаться не будет.

А проверка файла на существование file_exists(), только нужно путь не от балды писать, а от начала файловой системы или через $_SERVER['DOCUMENT_ROOT']
7. Bio man - 19 Декабря, 2011 - 20:50:46 - перейти к сообщению

OrmaJever пишет:
Bio man пишет:
не, это не Bio man пишет Радость
OrmaJever пишет:
OrmaJever пишет:
и это не OrmaJever пишет А?!
8. Demon1341 - 19 Декабря, 2011 - 21:05:09 - перейти к сообщению
Bio man попробую может завтра.
Теперь вот другая задача, надо что бы если юзер вводит логин на киррилице, то она конвертилась в латиницу и вводилась в таком виде в бд.
С помощью strtr попробывал вот такой код
//Если ник на киррилице, то переводим его в латиницу
PHP:
скопировать код в буфер обмена
  1. function encodestring($login)
  2.   {
  3.     // Сначала заменяем "односимвольные" фонемы.
  4.     $login=strtr($login,"абвгдеёзийклмнопрстуфхъыэ_",
  5.     "abvgdeeziyklmnoprstufh'iei");
  6.     $login=strtr($login,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
  7.     "ABVGDEEZIYKLMNOPRSTUFH'IEI");
  8.     // Затем - "многосимвольные".
  9.     $st=strtr($login,
  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 $login;
  20.   }

Но видимо не туда, я его вставляю, как заносилось в бд на русском так и заносится Не понял
9. Bio man - 19 Декабря, 2011 - 21:19:21 - перейти к сообщению
return $st
10. Demon1341 - 20 Декабря, 2011 - 22:22:07 - перейти к сообщению
Подскажите, как с помощью функции rename() изменить название каталога пользователя.
В скрипте предусмотрено изменение пользователем своего логина, при этом нужно, что бы и имя его папки менялось со старого логина на новый.
Вот часть кода, в котором идет обращение к бд для изменения старого логина на новый:
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['login']))//Если существует логин
  2.       {
  3. $login = $_POST['login'];
  4. $login = stripslashes($login); $login = htmlspecialchars($login); $login = trim($login);//удаляем все лишнее
  5. if ($login == '') { exit("Вы не ввели логин");} //Если логин пустой, то останавливаем сценарий
  6.  
  7. if (strlen($login) < 3 or strlen($login) > 15) {//проверяем дину
  8. exit ("Логин должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
  9. }
  10.  
  11. // проверка на существование пользователя с таким же логином
  12. $result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
  13. $myrow = mysql_fetch_array($result);
  14. if (!empty($myrow['id'])) {
  15. exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
  16. }
  17. $result4 = mysql_query("UPDATE users SET login='$login' WHERE login='$old_login'",$db);
  18. if ($result4=='TRUE') {
  19. mysql_query("UPDATE messages SET author='$login' WHERE author='$old_login'",$db);

После этого кода пробую так:
PHP:
скопировать код в буфер обмена
  1. $dir = './upload/user/'.$login.'/';
  2. rename($old_login, $login);

Тогда начинает ругаться: Warning: rename(demon1341,Дмитрий) [function.rename]: No such file or directory in.
Я так понимаю она файл ищет, и не находит, а как быть с переименовыванием каталога?
Или я во что то не врубаюсь, но каталоги она ведь тоже переименовывает Не понял
11. Bio man - 20 Декабря, 2011 - 23:02:29 - перейти к сообщению
выберите другое имя ф-ции и будет вам счастье
12. Okula - 20 Декабря, 2011 - 23:37:19 - перейти к сообщению
Demon1341 пишет:
Я так понимаю она файл ищет, и не находит, а как быть с переименовыванием каталога?
Или я во что то не врубаюсь, но каталоги она ведь тоже переименовывает

Передавать привильные значения функии, тогда и работать всё коректно будет.
13. Demon1341 - 21 Декабря, 2011 - 01:02:11 - перейти к сообщению
Всё равно что то никак не въеду как надо, писало что нет файла в дериктории, потому, что действительно не было, если создать папку с ником пользователя, то ошибок нет, но папка пользователя из /upload/user/ удаляется и создается в корне сайта Не понял
Всё, этот вопрос снят, помогло вот как:
PHP:
скопировать код в буфер обмена
  1. $dir = './upload/user/'.$old_login.'/';
  2.         $per = './upload/user/'.$login.'/';
  3. rename($dir, $per);

 

Powered by ExBB FM 1.0 RC1