За последние 24 часа нас посетили 201310 программистов и 2096 роботов. Сейчас ищут 1734 программиста ...

Помогите найти ошибку в коде

Тема в разделе "PHP для новичков", создана пользователем Guliver, 14 июл 2014.

  1. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Проблема в том, что файл загружается и создается поддиректория в любом случае, какой бы я файл не загружал (pdf, xls, doc, jpeg). Т.е. получается что не работает функция
    function checkFiles(). А что не так сделал не пойму


    Код (Text):
    1. // загружаем библиотеку JsHttpRequest.
    2. require_once "lib/JsHttpRequest/JsHttpRequest.php";
    3. // Инициализация. Обязательно указываем кодировку сценария!
    4. $JsHttpRequest =& new JsHttpRequest("utf-8");
    5. // Сохраняем рузультат в глобальном массиве $_RESULT (will appear in req.responseJs).
    6. $user = $_REQUEST['user'];
    7. $fileName = $_FILES['file']['name'];
    8. $tmpName = $_FILES['file']['tmp_name'];
    9. $fileType = $_FILES['file']['type'];
    10. $GLOBALS['_RESULT'] = array(
    11.   "type" => $fileType,
    12.   "user" => $user,
    13.   "name"     => $fileName,
    14.   "md5"   => md5(@file_get_contents($tmpName)),
    15. );
    16. $fileDir = "files";   // каталог для хранения файлов
    17. @mkdir($fileDir, 0777);  // создаем, если его еще нет
    18.  
    19. $config = array(
    20.     // Максимальная ширина и высота (в пикселях)
    21.     "max_width"=>3200,
    22.     "max_height"=>2200,
    23.     // Минимальная ширина и высота (в пикселях)
    24.     "min_width"=>300,
    25.     "min_height"=>300,
    26.     // Максимальный размер заливаемого файла (в байтах)
    27.     "max_size"=>5000000,
    28.     // Типы файлов
    29.     "type"=>array("image/jpg","image/gif","image/png", "image/jpeg"),
    30.     // Через сколько удалять картинки (в секундах)
    31.     "time_del"=>300,
    32.     // Ошибки
    33.     "error"=>array(
    34.         1=>"Ошибка при передачи файла",
    35.         2=>"Файл слишком много весит",
    36.         3=>"Файл не картинка",
    37.         4=>"Картинка слишком большая",
    38.         5=>"Картинка слишком маленькая",
    39.         6=>"Ошибка при создании миниатюры",
    40.         7=>"Ошибка при изменение размера",
    41.         8=>"Нету такой картинки",
    42.         9=>"Ошибка при добавлении в базу",
    43.         10=>"Ошибка при создании папки для миниатюры",
    44.         11=>"Ошибка при создании папки для картинок",
    45.         12=>"Ошибка при удалении миниатюры",
    46.         13=>"Ошибка при удалении большой картинки",
    47.         14=>"Такая картинка уже есть",
    48.     )
    49. );
    50.  
    51.  
    52.  
    53.  
    54. function checkFiles() {
    55.  
    56. if (array_search($_RESULT["type"], $config["type"]) < 0) {
    57. alert($config["error"][3]);
    58. return false;
    59. }
    60. else
    61. {
    62. return TRUE;
    63. }
    64.  
    65. }
    66.  
    67. // Проверяем, принят ли файл.
    68.  
    69. if ($_SERVER['REQUEST_METHOD'] == "POST" && $tmpName && checkFiles() )
    70. {
    71.  
    72. $file_directory = substr($_RESULT["md5"], 0, 5); // возвращает 5 первых символов, например: abcde
    73. $thumb_dir .= $fileDir . DIRECTORY_SEPARATOR . $file_directory; // указываем путь для подкаталога для хранения файлов
    74.  
    75. @mkdir($thumb_dir, 0777);
    76.  
    77. $name = "$thumb_dir/".time().".".$p[1];
    78. move_uploaded_file($tmpName, $name);
    79.  
    80. }
    81. else
    82. {
    83. alert("Попытка добавить файл недопустимого формата!");
    84. }
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    http://php.net/array_search
    Код (PHP):
    1. array_search($_RESULT["type"], $config["type"]) === FALSE
    или обойтись простым isset()
     
  3. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    А как в этом случае мне сохранить это условие
    Код (Text):
    1. if (array_search($_RESULT["type"], $config["type"]) < 0)
    ????
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Никак. Оно не имеет смысла
     
  5. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Что я туплю, но вот здесь у меня все работает
    Код (Text):
    1.  private function checkFiles() {
    2.         if (!isset($_FILES[$this -> config["name"]]) || !is_uploaded_file($_FILES[$this -> config["name"]]['tmp_name'])) {
    3.             $this -> error($this -> config["error"][1]);
    4.         }
    5.  
    6.         if ($_FILES[$this -> config["name"]]["error"] != 0)
    7.             $this -> error($this -> config["error"][1]);
    8.         if ($_FILES[$this -> config["name"]]["size"] > $this -> config["max_size"]) {
    9.             $this -> error($this -> config["error"][2]);
    10.         }
    11.         if (array_search($_FILES[$this -> config["name"]]["type"], $this -> config["type"]) < 0) {
    12.             $this -> error($this -> config["error"][3]);
    13.         }
    14.         $size = getimagesize($_FILES[$this -> config["name"]]['tmp_name']);
    15.         if ($size[0] > $this -> config["max_width"] || $size[1] > $this -> config["max_height"]) {
    16.             $this -> error($this -> config["error"][4]);
    17.         }
    18.         if ($size[0] < $this -> config["min_width"] || $size[1] < $this -> config["min_height"]) {
    19.             $this -> error($this -> config["error"][5]);
    20.         }
    21.         return true;
    22.     }
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    у тебя array_search() никогда не вернёт значение меньше нуля, значит проверка всегда будет проходить