не могу загрузить файл с помощью uploadify

у меня проблема с загрузкой. на клиенте он работает очень хорошо (все функции, такие как кнопка, прогресс и т. д., и файл могут быть загружены на клиенте), но на хостинге (сервере) файл не может быть загружен.

на сервере другая (кнопка, прогресс, скрипт для загрузки) работает, только файл, который я хочу загрузить, не может быть загружен.

в противном случае у меня есть некоторый процесс для вставки в базу данных (путь к файлу), я помещаю SQL-запрос на вставку в скрипт для процесса загрузки, запрос работает, но файл не может быть загружен

мой скрипт (upload_file.php):

<?php    

    $file_id         = $_POST['file_id']; 

    if (!empty($_FILES))  
{

    $tempFile   = $_FILES['Filedata']['tmp_name'];  
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';    
    $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

        $destinationFile = "files/". $_FILES['Filedata']['name'];           
        move_uploaded_file($tempFile,$targetFile);



        //additional - query to insert the path

        include("database_connection.php");     

        $query  = "insert into file (file_id,path) values ('$file_id','$destinationFile')";
        $result = mysql_query($query);      

        mysql_close();   
}  ?>

и джаваскрипт:

$('#file').uploadify
({
    'uploader'   : '/myweb/shockwaves/uploadify.swf',
    'script'     : '/myweb/process/upload_file.php',
    'cancelImg'  : '/myweb/images/uploadify/cancel.png',
    'folder'     : '/myweb/files',
    'auto'       : true,    
    'buttonText' : 'Upload',
    'scriptData' : {'file_id':'001'}
});

Благодарность :)


person bungdito    schedule 03.05.2011    source источник
comment
Определить не работает. У вас есть ошибки? Логи? Вы просматривали свой код с помощью отладчика?   -  person lucifurious    schedule 03.05.2011


Ответы (1)


Нам нужно больше информации, но возможности, которые приходят на ум:

  1. Неверный HTML-код формы.
  2. Файл слишком большой.
  3. Имя файла слишком длинное.
  4. Проблема с правами на запись файлов на сервере.

Убедитесь, что ваша HTML-форма имеет "enctype"

Убедитесь, что ваша HTML-форма на странице имеет enctype="multipart/form-data", например.

<form action="" method="POST" enctype="multipart/form-data">

Диагностика ошибки PHP/ошибки записи файла

Если это проблема с файлом/правами доступа, вы можете обнаружить ошибку PHP, поэтому попробуйте включить отчеты об ошибках на странице, как показано ниже:

<?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1); 
?>

Изменить file_id для автоматического создания

Вы также должны изменить свою базу данных, чтобы она генерировала ваш file_id (т.е. автоинкрементный первичный ключ/идентификатор), а не передавала его. Если у вас нет автоматического создания, вы рискуете дублировать записи file_id ( или неудачный запрос, если столбец file_id является первичным ключом, как и должно быть).

Предположительно, вы также на самом деле не используете 'scriptData' : {'file_id':'001'}, поскольку это означало бы, что вы вставляете file_id из 001 для каждой записи. Тем не менее, даже генерация этого размера клиента сопряжена с риском: а) люди выбирают свои собственные file_id и искажают ваши данные, б) ошибки при отключении JS (загрузка не будет работать, но файл, вероятно, все еще будет работать) и в) дублирование file_id поколение.

Ваш образец уязвим для SQL-инъекций

Ваш текущий образец особенно уязвим для SQL-инъекций, поскольку вы не избегаете своих параметров. Вы можете отклонить это как «о, все в порядке, это внутреннее приложение, поэтому нет риска для безопасности», но даже случайная инъекция SQL может вызвать проблемы. Если это общедоступный веб-сайт, вы только что открыли свою базу данных. Я предполагаю, что это сокращенный образец, но даже в этом случае не рекомендуется публиковать неэкранированный SQL (по крайней мере, без комментариев), так как это просто приводит к тому, что другие менее опытные разработчики копируют/вставляют его куда-нибудь в приложение.

person Matt Mitchell    schedule 03.05.2011
comment
да, проблема с правами на запись файлов на сервере - это проблема :) теперь все работает очень хорошо, спасибо - person bungdito; 03.05.2011
comment
на самом деле file_id, который я генерирую на javascript, не всегда 001 для каждой записи. 001 на приведенном выше просто для примера, большое спасибо. :) - person bungdito; 03.05.2011
comment
@bungdito - но если file_id будет просто 001/002/003/004 и т. Д., Почему бы БД не сгенерировать это, чтобы вы никогда не рисковали двумя клиентами, загружающими один и тот же file_id ? - person Matt Mitchell; 03.05.2011
comment
Попробуйте это руководство startutorial.com/articles/view/jquery-uploadify-with -php - person Mukesh; 16.07.2013