2013-07-13 7 views
3

나는 수수께끼에 빠졌고 누군가 나에게 똑바로 대답 할 수 있는지 궁금해하고있었습니다. 그래서 PHP/MySQL을 사용하여 사진 업로드 스크립트를 만들었습니다. 스크립트 내에서 사진은 크기가 조정되고 업로드되는 동안 임시 이름이 지정됩니다. 필자는 여러 장의 사진 (파일 크기 220 KB | 960 x 720)을 사용하여 테스트했으며 모든 것이 잘 작동하고있었습니다.사진 업로드 getimagesize() 경고 - 파일 이름을 비워 둘 수 없습니다.

Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in /php_parsers/photo_system.php on line 94 

Warning: Cannot modify header information - headers already sent by (output started at /php_parsers/photo_system.php:94) in /php_parsers/photo_system.php on line 96 

나는 유사한 문제가있는 게시물에 대한 유래를 확인하고 온 :이 오류를 얻고 갑자기 | 그럼 난 내 디지털 카메라 (X 4000 3000 파일 크기 2.47 MB)에서 여러 사진을 업로드 시도 그러나 그것은 내가 경험하고있는 시나리오에 적용되지 않는 것 같습니다.

"photo_system.php"에 적용 가능한 코드는 다음과 같습니다. 나는 94 번과 96 번 위반 라인에 대해 논평했다. 당신이 줄 수있는 모든 도움/아이디어는 크게 감사 할 것입니다!

 <?php 
    if (isset($_FILES["photo"]["name"]) && isset($_POST["gallery"])){ 
     $sql = "SELECT COUNT(id) FROM photos WHERE user='$log_username'"; 
     $query = mysqli_query($db_conx, $sql); 
     $row = mysqli_fetch_row($query); 
     if($row[0] > 79){ 
      header("location: ../message.php?msg=The system allows only 80 pictures total"); 
      exit();  
    } 
    $gallery = preg_replace('#[^a-z 0-9,]#i', '', $_POST["gallery"]); 
    $fileName = $_FILES["photo"]["name"]; 
    $fileTmpLoc = $_FILES["photo"]["tmp_name"]; 
    $fileType = $_FILES["photo"]["type"]; 
    $fileSize = $_FILES["photo"]["size"]; 
    $fileErrorMsg = $_FILES["photo"]["error"]; 
    $kaboom = explode(".", $fileName); 
    $fileExt = end($kaboom); 
    $db_file_name = date("DMjGisY")."".rand(1000,9999).".".$fileExt; // WedFeb272120452013RAND.jpg 
    list($width, $height) = getimagesize($fileTmpLoc); //Offending Line 94 
    if($width < 10 || $height < 10){ 
     header("location: ../message.php?msg=ERROR: That image has no dimensions"); //Offending Line 96 
     exit(); 
    } 
    if($fileSize > 4194304) { 
     header("location: ../message.php?msg=ERROR: Your image file was larger than 4mb"); 
     exit(); 
    } else if (!preg_match("/\.(gif|jpg|png)$/i", $fileName)) { 
     header("location: ../message.php?msg=ERROR: Your image file was not jpg, gif or png type"); 
     exit(); 
    } else if ($fileErrorMsg == 1) { 
     header("location: ../message.php?msg=ERROR: An unknown error occurred"); 
     exit(); 
    } 
    $moveResult = move_uploaded_file($fileTmpLoc, "../user/$log_username/$db_file_name"); 
    if ($moveResult != true) { 
     header("location: ../message.php?msg=ERROR: File upload failed"); 
     exit(); 
    } 
    include_once("../php_includes/image_resize.php"); 
    $wmax = 800; 
    $hmax = 600; 
    if($width > $wmax || $height > $hmax){ 
     $target_file = "../user/$log_username/$db_file_name"; 
     $resized_file = "../user/$log_username/$db_file_name"; 
     img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt); 
    } 
    $sql = "INSERT INTO photos(user, gallery, filename, uploaddate) VALUES ('$log_username','$gallery','$db_file_name',now())"; 
    $query = mysqli_query($db_conx, $sql); 
    mysqli_close($db_conx); 
    header("location: ../photos.php?u=$log_username"); 
    exit(); 
} 
?><?php 
if (isset($_POST["delete"]) && $_POST["id"] != ""){ 
    $id = preg_replace('#[^0-9]#', '', $_POST["id"]); 
    $query = mysqli_query($db_conx, "SELECT user, filename FROM photos WHERE id='$id' LIMIT 1"); 
    $row = mysqli_fetch_row($query); 
    $user = $row[0]; 
    $filename = $row[1]; 
    if($user == $log_username){ 
     $picurl = "../user/$log_username/$filename"; 
     if (file_exists($picurl)) { 
      unlink($picurl); 
      $sql = "DELETE FROM photos WHERE id='$id' LIMIT 1"; 
      $query = mysqli_query($db_conx, $sql); 
     } 
    } 
    mysqli_close($db_conx); 
    echo "deleted_ok"; 
    exit(); 
} 
?> 

답변

8

모두 OK입니다. 나는 그 문제가 무엇인지 알았다. 바라기를 이것은 미래에 누군가를 도울 것입니다. 그래서 phpinfo()를 확인해 보면 upload_max_filesize가 2M으로 설정되어 있다는 것을 알았습니다. 나는 잘못된 파일의 디렉토리에 php.ini 파일을 추가 포함 : 내 시스템은 내가 정의하지 못했다는 사실을 좋아하지 않았기 때문에 date.timezone를 추가했다

upload_max_filesize = 250M 
post_max_size = 250M 
max_execution_time = 300 

date.timezone = "America/Los_Angeles" 

. 어쨌든이 문제가 해결되었습니다.

+0

덕분에 도움이 된 친구 –

+0

나에게도 같은 문제가 발생했습니다. 감사합니다. –

관련 문제