За последние 24 часа нас посетили 18904 программиста и 1616 роботов. Сейчас ищут 970 программистов ...

Загрузка файлов на сервер

Тема в разделе "PHP для новичков", создана пользователем vladislav19923, 15 ноя 2011.

  1. vladislav19923

    vladislav19923 Активный пользователь

    С нами с:
    20 сен 2011
    Сообщения:
    13
    Симпатии:
    0
    СКрипт для загрузки файлов на сервер
    $maxsize - максим размер файла.
    PHP:
    1. $maxsize = 28320;
    2.  
    3. if(!$_POST['submit'])
    4. {
    5. //print_r ($HTTP_POST_FILES)
    6. echo $error = "";
    7. /*
    8. Это приведет к тому, что остальная часть сценария будет пропущена,
    9. и в броузере отобразится форма выгрузки файла
    10. */
    11. }
    12. //Если файл не загружен и не существует ошибки если что удаляем временный файл
    13. if(!is_uploaded_file($_FILES['upload_file']['tmp_name']) AND !isset($error))
    14. {
    15. $error = "<b>Вы должны отправить файл!</b><br /><br />";
    16. //Удалить файл unlink
    17. unlink($_FILES['upload_file']['tmp_name']);
    18. }
    19.  
    20. //ПРоверяем подходит ли по размеру
    21. if($_FILES['upload_file']['size'] > $maxsize AND !isset($error))
    22. {
    23. $error = "<b>Файл не может быть более $maxsize байт</b><br /><br />";
    24. unlink($_FILES['upload_file']['tmp_name']);
    25. }
    26. //ПРоверим на тип данных нам нужен jpeg или gif
    27. if($_FILES['upload_file']['type'] != "image/gif" AND
    28.  $_FILES['upload_file']['type'] != "image/pjpeg" AND
    29.  $_FILES['upload_file']['type'] != "image/jpeg" AND
    30.  !isset($error))
    31.  {
    32.  $error = "<b>Допускается загружать только файлы типа jpeg и gif</b><br /><br />";
    33.  unlink($_FILES['upload_file']['tmp_name']);
    34.  }
    35.  
    36.   if(!isset($error))
    37. {
    38. copy($_FILES['upload_file']['tmp_name'], "./load/".basename($_FILES['upload_file']['name']));
    39.  unlink($_FILES['upload_file']['tmp_name']);
    40.  print "Спасибо за файл";
    41.  exit;
    42. }
    43. else
    44. {
    45. echo("$error");
    46. }
    47.  
    HTML:
    1. <title>Building a Form</title>
    2. </head>
    3. <form action="<? echo(htmlspecialchars($_SERVER['PHP_SELF'])) ?>" method="post" enctype="multipart/form-data">
    4. Выберите файл для загрузки:<br />
    5. <input type="file" name="upload_file" size="80">
    6. <br />
    7. <input type="submit" name="submit" value="ОТправить">
    8. </form>
    9. </body>
    10. </html>
    Проблема в том что unlink выдает ошибку
    Warning: unlink() [function.unlink]: Invalid argument line 30
    Вы должны отправить файл!
    Я думаю что проблема что файл не отправляется в папку tmp но почему???

    Cпасибо большое![/html]
     
  2. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    move_uploaded_file() юзайте
    а если анлинк ругается не по делу, то "засобачьте" его
     
  3. vladislav19923

    vladislav19923 Активный пользователь

    С нами с:
    20 сен 2011
    Сообщения:
    13
    Симпатии:
    0
    Засобачил все равно не передает правда ошибка исчезла спасибо.
    и сообщение об ошибке что "ВЫ должны отправить файл вылетает" возможно не может найти его в tmp...
    Вопрос
    Какой destination надо указывать в move_upload_file?(Из tmp или из корня сервера?)
    И еще один если я буду передавать файл d.jpg и уберу unlink то смогу найти его в tmp своего сервера ?
     
  4. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    у вас проверка уж очень мудреная какая-то

    вот загрузка файла. myfile это name того input'а, который отвечает за выбор файла ;)
    PHP:
    1. <?
    2. $path='path/to/file/'.$_FILES['myfile']['name']; // желаемый путь после загрузки
    3.         if(is_uploaded_file($_FILES['myfile']['tmp_name']))
    4.         {
    5.             move_uploaded_file($_FILES['myfile']['tmp_name'], $path);
    6.             echo "<br>{$_FILES['myfile']['name']}: uploaded.";
    7.         }
     
  5. vladislav19923

    vladislav19923 Активный пользователь

    С нами с:
    20 сен 2011
    Сообщения:
    13
    Симпатии:
    0
    krow7
    путь destination я как должен указать?
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Во-первых:
    Код (Text):
    1. unlink($_FILES['upload_file']['tmp_name']);
    Глупость. Не нужно его удалять вообще. Он сам автоматически удаляется, когда скрипт php завершает работу.

    Во-вторых: я пытался понять, почему не копируется файл и выдаёт ошибку, запустил этот код у себя, так вот у меня ошибок оно не выдавало и при наличии папки load файлы копировались.

    В-третьих: не правильно копировать загруженный файл командой copy. Специально для этого есть move_uploaded_file().

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

    vladislav19923 Активный пользователь

    С нами с:
    20 сен 2011
    Сообщения:
    13
    Симпатии:
    0
    в php.ini все разрешено. файл макс размера не превышает.
    sobachnik
    Где вы разместили папку load ? Там где home, usr, tmp или внутри папки home/Сервер/www/?Спасибо
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    В соответствии с вышеприведённым кодом, по идее, папка load должна находиться в той же папке, в которой находится скрипт, принимающий файл.

    Я как-то раз здорово обломался из-за использования относительных путей. Теперь всегда стараюсь использовать только абсалютный путь. В PHP путь к текущей папке (той, в которой находится скрипт) можно легко определить:
    PHP:
    1. <?php
    2. $path = dirname(__FILE__);
    3. ?>
    Теперь в переменной $path находится абсолютный путь к папке со скриптом.
    Советую пользоваться этим всегда, ибо бывает и такое, что file_get_contents('./dir/file') - не работает.
     
  9. vladislav19923

    vladislav19923 Активный пользователь

    С нами с:
    20 сен 2011
    Сообщения:
    13
    Симпатии:
    0
    Sobachnik спасибо вам за помощь. получилось.
    Можно еще вопрос не по теме.
    Вы обучались самостоятельно по книжкам или получали образование?
    Я хотел бы тоже получить но в моем городе нету никаких специализирвоанных учереждений и курсов. а к дистанционным отношусь скептически(
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    В основном по книжкам. Начал с простой небольшой книжки для начинающих. Я не ставил перед собой задачи сразу (с малыми знаниями) пытаться сделать что-то большое сложное. Потом купил ещё одну книгу, большую и толстую, но тоже для начинающих. Потом купил книжку про php для профессионалов. Ну и по смежным тематикам - MySQL, HTML/CSS, JavaScript, Ajax - покупал и читал книги, разбираясь с примерами и т.д. Практически все книги читал от корки до корки. Также многое узнаётся из интернета - статьи, просмотр разных форумов - этого, например. Ну и, конечно, практика. А практики стало весьма много, как устроился работать web-программистом.