Загрузка из приложения MAC Photos в форму PHP

У меня есть пользователь, у которого проблемы с загрузкой из приложения MacBook Air Photos. MacBook всего 2 года и он обновлен, и они могут регулярно загружать изображения без приложения. Я не могу воспроизвести проблему сам и мне тяжело с этим.

PHP-код делает проверку перед загрузкой на сервер

    if(getimagesize($_FILES['image']['tmp_name']) == TRUE){ //files have tmp_names on server when being uploaded

  $name; $image; //Vars created here for use in retrieving image id from DB afterwords
  function saveImage($uid,$name,$image){
      //Update to get rid of default pic from registration
      $qry = "UPDATE profile_pics SET name='$name', image='$image' WHERE user_id='$uid';";
      $result=mysql_query($qry) or die(mysql_error());

      if($result){
          echo "<br/>Image uploaded.";
      }
      else{
          echo "<br/>Image not uploaded.";
      }
  }

  if($_FILES['image']['size'] < 1020000){ //1.02 since file size grows when uploaded to server.
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES['image']['tmp_name']);
    $ok = false;
    switch ($mime) {
      case 'image/jpeg':
      case 'image/pjpeg':
      case 'image/png':
      case 'image/gif':
      case 'image/jpg':
        $ok = true;
        break;
      default:
      $errors[] = lang("ACCOUNT_PIC_WRONG_FILETYPE");
        // die("Unknown/not permitted file type");
    }
    if($ok == true){
      $image= addslashes($_FILES['image']['tmp_name']); //addslashes() function returns a string with backslashes in front of predefined
      $name= addslashes($_FILES['image']['name']);      //characters: ', ", \, NULL. To prepare string for storage in a database and database queries
      $image= file_get_contents($image);
      $image= base64_encode($image);
      saveImage($uid,$name,$image);
    }
  }else{
    $errors[] = lang("ACCOUNT_PICSIZE_TOO_LARGE");
  }
}

HTML/Javascript часть формы. Javascript делает некоторую проверку перед переходом к бэкэнду Это должно предупредить пользователя об ошибках перед отправкой формы.

 <script type="text/javascript">
  //Check to make sure pic size not to large
  jQuery(document).on("change", ".input-pic[type=file]", function () {
      var file = this.files[0];
      var size = file.size / 1024;
      var ext = file.name.split('.').pop();
      if (size > 1020) {
          alert("Too large Image. Only image smaller than 1MB (1000kB) can be uploaded.");
          //If too large, make field empty again
          jQuery(this).replaceWith('<input type="file" class="form-control input-pic" name="image" id="image">');
      }else if(ext == "jpeg" || ext == "pjpeg" || ext == "png" || ext == "gif" || ext == "jpg"){
        //Do nothing, valid image type
      }else{
        alert("Only jpeg, png, and gif pictures may be uploaded. You uploaded: ."+ext);
        jQuery(this).replaceWith('<input type="file" class="form-control input-pic" name="image" id="image">');
      }
  });
  </script>

  <div class='row form-row' style="padding-bottom:10px;">
    <div class='col-md-12'>
      <strong for="image">Upload a profile picture (JPG/PNG/GIF size limited to 1MB)</strong>
    <input type="file" class="input-pic form-control" name="image" id="image">
    </div>
  </div>

Они продолжают получать предупреждение в javascript: предупреждение об ошибках MAC Photos. Опять же, они не получают его, когда загружают его вне приложения в обычном режиме (как это сделал бы пользователь ПК).

1 ответ

Решение

Я считаю, что OS X устанавливает расширение в верхний регистр. Пытаться var ext = strtolower(file.name.split('.').pop();) и посмотреть, если это просто проблема проверки.

Примечание: вы проверяете только расширение файла - это ОГРОМНАЯ угроза безопасности.

Другие вопросы по тегам