2013-04-04 4 views
0

PC에서 Linux 서버로 파일을 업로드하는 perl CGI 스크립트가 있습니다.Perl HTML 파일 업로드 문제. 파일의 크기가 0입니다.

내 HTML 양식으로 CGI 호출을 작성한 다음 실행하면 정확하게 작동하지만 기존 응용 프로그램에 동일한 호출을 넣으면 파일은 서버에 작성되지만 가져 오지는 않습니다 데이터는 크기가 0입니다.

필자는 %ENV에서 추출 할 수있는 환경 변수를 비교 했으므로 아무런 이유가없는 것으로 보입니다. 실제로 기존의 응용 프로그램에서 사용하고 있던 값으로, 내 자신의 HTML 스크립트에서 ENV를 여러 번 변경해 보았습니다. 문제가 드러나지 않았습니다.

로그의 아무 것도 나에게 단서를주지 못합니다. 업로드 작업은 성공이라고 생각합니다. 두 테스트에서 사용자가 동일합니다. 권한이 문제라면 서버에 파일이 생성되지 않습니다.

결과는 Chrome에서와 동일합니다 (응용 프로그램 내에서가 아니라 내 자신의 HTML 스크립트에서 작동).

비교할 특정 설정은 무엇입니까? 응용 프로그램 내부에서 실행하는 경우,

if (open(UPLOADFILE, ">$upload_dir/$fname")) { 
    binmode UPLOADFILE; 

    while (<$from_fh>) { 
     print UPLOADFILE; 
    } 
    close UPLOADFILE; 
    $out_msg = "Done with Upload: upload_dir=$upload_dir fname=$fname"; 
} 
else { 
    $out_msg = "ERROR opening for upload: upload_dir=$upload_dir filename=$filename"; 
} 

내가

  • 그것은 while 루프를 입력하지 않는지 확인 않았다

    업로드 코드입니다.
  • 내 자신의 HTML 스크립트에서 호출 될 때 while 루프를 입력합니다.

$from_fh의 값은 두 실행에 대해 동일합니다. 아래 블록에서 사용되는 모든 값은 두 실행에서 모두 동일합니다.

+0

어디에서'$ from_fh'을 가져 오나요? 그것은 당신이 그 값이 두 환경에서 모두 동일해야하고 다른 것이어야하고 GLOB (0x90c06c)와 같은 것이라고 말할 것을 걱정합니다. – Borodin

+0

그래서 Windows PC에서 웹 브라우저를 실행하고 업로드하고 싶습니다 웹 서버를 실행중인 Linux 시스템에 해당 PC에있는 파일? – Borodin

답변

0

열려있는 오류 결과를 확인할 수 있습니까?

my $err; 
open(my $uploadfile, ">", "$upload_dir/$fname") or $err = $!; 
if (!$uploadfile) { 
    my $out_msg = "ERROR opening for upload: upload_dir=$upload_dir filename=$filename: $err"; 
} 
else { 
    ### Stuff 
    ...; 
} 
+0

open 명령의 값을 확인하는 코드가있는 것이 좋습니다. open 명령이 성공합니다. 그것은 작성중인 파일을 열어서 성공적으로 작성합니다. – user2234591

+0

그는 이미 그렇게합니다. 'open'은'if' 문에 대한 조건입니다. – Borodin

0

내 생각 엔, 다른 응용 프로그램에서 내장되어있는 사실에 근거, 모든 입력은 다른 응용 프로그램의 일부인 일부 기능이 이미 읽은 것입니다. 예를 들어,이 프로그램을 CGI 스크립트의 일부로 사용하려하고 CGI.pm의 param() 함수를 사용했다면 전체 파일 업로드가 이미 읽혀 졌을 것입니다. 따라서 내 자신의 코드가 파일을 다시 읽으려고하면 데이터가 이미 준비 되었기 때문에 0의 데이터를 받게됩니다.