За последние 24 часа нас посетили 17602 программиста и 1592 робота. Сейчас ищут 1388 программистов ...

Проблемы с upload

Тема в разделе "Прочие вопросы по PHP", создана пользователем Анто}{a, 9 июн 2007.

  1. Анто}{a

    Анто}{a Активный пользователь

    С нами с:
    12 апр 2007
    Сообщения:
    23
    Симпатии:
    0
    Народ, подскажите плиз в чем дело! Никак не получается сделать нормлаьную загрузку файлов на сервер. Код загрузки примерно следующий (выброшены только не имеющие отношения к делу части)

    Код (Text):
    1. <?php
    2. if($active=="insert") {
    3.    if(isset($_FILES['filename']['name'])){
    4.        echo "Uploading: ".$_FILES['filename']['name']."<br>";
    5.        $tmpName = $_FILES['filename']['tmp_name'];
    6.        $newName = "./uploads/files/" . $_FILES['filename']['name'];
    7.  
    8.        if(!is_uploaded_file($tmpName) || !move_uploaded_file($tmpName, $newName)){
    9.             echo "FAILED TO UPLOAD " . $_FILES['filename']['name'] .
    10.                 "<br>Temporary Name: $tmpName <br>";
    11.                 print_r($_FILES['filename']);
    12.        } else {
    13.             echo "File uploaded.";
    14.        }
    15. }
    16. }
    17. else{
    18. ?>
    19. <form name=form1 enctype="multipart/form-data" action="index_.php" method="post">
    20. <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
    21. <input type="hidden" name="active" value="insert">
    22. <table>
    23.  
    24. <tr>
    25.     <td>
    26.         <b>Загружаемый файл:</b>
    27.     </td>
    28. </tr>
    29. <tr>
    30.     <td>
    31.         <INPUT type="file" name="filename">
    32.     </td>
    33. </tr>
    34.  
    35. <tr><td height=10></td></tr>
    36. <tr>
    37.     <td align="right">
    38.         <INPUT type="submit" class=bluebutton>
    39.     </td>
    40. </tr>
    41. </table>
    42. </form>
    43. <?
    44. }
    45. ?>
    В результате выполнения получае следующее:
    Ошибка возникает в функции move_uploaded_file() потому что на самом деле никакой файл в C:\inetpub\wwwroot\temp\ не создался! Перерыл уже вроде все, ничего не понимаю!

    Помогите плиз! Заранее спасибо!
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    В переменной $newName должен быть абсолютный путь а не относительный

    Абсолютный путь до файла обрабатываемого на данный момент можно взять из dirname(__FILE__); к нему дописать относительный до папки куда будет закачиваться файл

    Пример
    Код (Text):
    1. $newName  = dirname(__FILE__);
    2. $newName .= DIRECTORY_SEPARATOR;
    3. $newName .= $_FILES['filename']['name'];

    Вместо move_uploaded_file() также можно использовать конструкцию
    file_put_contents($newName, file_get_contents($tmpName));
    (таким образом использовать относительный путь)

    Но это будет "стилистически" не правильно и делать так не рекомендуется...
     
  3. Анто}{a

    Анто}{a Активный пользователь

    С нами с:
    12 апр 2007
    Сообщения:
    23
    Симпатии:
    0
    Дело в том, что даже с абсолютным путем возникнет ошибка - так как файла, который он пишет что создал в C:\temp\ а именно а именно phpD73B.tmp на самом деле там не существует! Вопрос как раз в том - почему он его не создает, хотя upload вроде проходит нормально
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Он создаёт, просто как только скрипт оканчивает свою работу (или вылетает с ошибкой) он его удаляет...
     
  5. Анто}{a

    Анто}{a Активный пользователь

    С нами с:
    12 апр 2007
    Сообщения:
    23
    Симпатии:
    0
    Блин! И правда! Спасибо большое! Все работает!