За последние 24 часа нас посетили 17130 программистов и 1246 роботов. Сейчас ищут 955 программистов ...

Подскажите, как сделать загрузку файла (PHP + Sajax + JS)?

Тема в разделе "JavaScript и AJAX", создана пользователем mazyakov, 12 июн 2007.

  1. mazyakov

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

    С нами с:
    29 май 2006
    Сообщения:
    84
    Симпатии:
    0
    Адрес:
    Minsk
    Я сделал, что при выборе файла, производиться проверка его и загрузка на сервер, там он его режет как мне нужно, потом копирует в др. директорию и возвращает мне имя нового файла, кот. я вывожу на экран. ЛОКАЛЬНО все работает, но на хосте не хочет копировать файл.

    Вот форма:
    Код (Text):
    1. <script language="JavaScript" type="text/javascript">
    2. <!--
    3. {ajax}
    4.  
    5. function view()
    6. {
    7.     f = document.forms['picform'];
    8.     x_checkFormatPicture(f.file.value, resultFileFormat);
    9. }
    10.  
    11. function resultFileFormat(result)
    12. {
    13.     f = document.forms['picform'];
    14.     if (result == '0') {
    15.         alert('{ERROR_FORMAT_FILE}');
    16.         document.getElementById('b').style.display = 'none';
    17.         f.reset();
    18.     } else {
    19.         x_cutPicture(f.file.value, result, outCutPicture);
    20.     }
    21. }
    22.  
    23. function outCutPicture(result)
    24. {
    25.     f = document.forms['picform'];
    26.     document.getElementById('b').style.display = '';
    27.     f.new_img.src = result;
    28. }
    29.  
    30. function printFormError(result)
    31. {
    32.     f = document.forms['picform'];
    33.     if (result) {
    34.         document.getElementById('error').innerHTML = result;
    35.     } else {
    36.         f.submit();
    37.     }
    38. }
    39.  
    40. // -->
    41. </script>
    42.  
    43. <div id="error"></div>
    44.  
    45. <table border="0" cellpadding="1" cellspacing="0">
    46. <form method="POST" action=""  enctype="multipart/form-data" name="picform">
    47. <input type="hidden" name="id" value="{id}">
    48. <tr>
    49.     <td>&nbsp;</td>
    50.     <td>
    51.     <div id="img" style="display: {disp};"><img src="{img}" border="0"></div>
    52.     <div id="b" style="display: none;"><img name="new_img" src="" border="0"></div>
    53.     </td>
    54. </tr>
    55. <tr style="display: {show_file};">
    56.     <td>{FILE}:</td>
    57.     <td><input type="file" name="file" class="input_text" id="a" onchange="view()"></td>
    58. </tr>
    59. ....
    60. <tr>
    61.     <td>&nbsp;</td>
    62.     <td>
    63.     <input type="hidden" name="{status}" value="1">
    64.     <input type="button" value="{STATUS}" class="submit" onclick="x_FormCheck(
    65.     document.forms['picform'].file.value,
    66.     document.forms['picform'].name.value,
    67.     document.forms['picform'].description.value,
    68.     document.forms['picform'].category.value,
    69.     document.forms['picform'].keyword.value, printFormError);"></td>
    70. </tr>
    71. </form>
    72. </table>
    в чем может быть проблема??

    Вот PHP код:
    PHP:
    1. require_once("include/Sajax.php");
    2. header ("Content-type: text/html; charset=" . $config['charset_sajax']);
    3. $sajax_request_type = "GET";
    4. sajax_init();
    5.  
    6. // Export in JavaScript next PHP-function
    7. sajax_export("cutPicture", "checkFormatPicture", "FormCheck");
    8. sajax_handle_client_request();
    9.  
    10. // Set tmp picture for show user
    11. function cutPicture($param, $type)
    12. {
    13.     global $img, $config;
    14.     $save_path = PATH_TMP_PICTURE . uniqid("tmp_") . ".jpeg";
    15.     $copy = copy($param, $save_path);
    16.     if ($copy) {
    17.         $type = $img->checkTypeImage($save_path);
    18.         $new_file = PATH_TMP_PICTURE . uniqid("pictmp_") . ".jpeg";
    19.         $img->changeSizeImage($save_path, $new_file, $type['type'], $config['picture']['small_width'], $config['picture']['small_height'], 90);
    20.         if (is_file($save_path) && file_exists($save_path)) {
    21.             unlink($save_path);
    22.         }
    23.         setTmpPic($new_file);
    24.         return $new_file;
    25.     }
    26. }
    27. // Check format picture for Sajax
    28. function checkFormatPicture($name)
    29. {
    30.     $format = strtolower(substr(strstr($name, '.'), 1));
    31.     if (!preg_match(FORMAT_PICTURE, $format)) {
    32.         return 0;
    33.     } else {
    34.         return $format;
    35.     }
    36. }
    37. // Check form add picture by means of Sajax
    38. function FormCheck($file, $name, $description, $category, $keyword)
    39. {
    40.     global $langue, $utilit;
    41.     $error = null;
    42.     $file = trim($file);
    43.     if (!isset($_GET['edit'])) {
    44.         if (empty($file)) {
    45.             $error .= $utilit->outHtmlError($langue['EMPTY_PICTURE_FILE']);
    46.         }
    47.     }
    48.     $name = trim($name);
    49.     if (empty($name)) {
    50.         $error .= $utilit->outHtmlError($langue['EMPTY_PICTURE']);
    51.     }
    52.     $description = trim($description);
    53.     if (empty($description)) {
    54.         $error .= $utilit->outHtmlError($langue['EMPTY_DESCRIPTION']);
    55.     }
    56.     $category = trim($category);
    57.     if (empty($category)) {
    58.         $error .= $utilit->outHtmlError($langue['EMPTY_CATEGORY']);
    59.     }
    60.     $keyword = trim($keyword);
    61.     if (empty($keyword)) {
    62.         $error .= $utilit->outHtmlError($langue['EMPTY_KEYWORD']);
    63.     }
    64.     return $error;
    65. }
    я часть формы вырезал для экономии. В чем может быть проблема?
     
  2. mazyakov

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

    С нами с:
    29 май 2006
    Сообщения:
    84
    Симпатии:
    0
    Адрес:
    Minsk
    Всем спасибо, сам разобрался, приведенный выше пример будет работать только в одной файловой системе. Нужно менять весь принцип для решения проблемы, типа: делаем две формы, одна только для файла, другая – для данных. В первую вложили файл, проверили, если что, ругнулись, если все в порядке, submit(), загружаем файл на сервер, делаем с ним все, что необходимо, возвращаем его новое название…

    Тема закрыта.