не могу загрузить файл используя uploadify - PullRequest
3 голосов
/ 03 мая 2011

У меня проблема с 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();   
}  ?>

и JavaScript:

$('#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'}
});

спасибо:)

1 Ответ

3 голосов
/ 03 мая 2011

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

  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 (по крайней мере, без комментариев), так как это просто приводит к тому, что другие менее опытные разработчики копируют / вставляют его в приложение где-то.

...