2013-08-26 1 views
9

업로드를 위해 내 코드에 $input = fopen('php://input', 'r'); 줄이 있습니다.php : // 입력을 자르는 이유는 무엇입니까?

파일 업로드가 완료되면 나는 $_SERVER['CONTENT_LENGTH']을 확인하여 모든 것이 예상대로 전송되었는지 확인합니다. 최근에 CONTENT_LENGTH과 내 업로드 파일의 크기가 무작위로 일치하기 시작했습니다 (20 분마다 한 번씩 매우 자주 업로드하는 사람들과 일치 함).

불일치를 기록하고 저장했는데 일부 파일을 열 수 없거나 일부 파일을 다운로드 할 수 없어서 일부 파일이 끊어져서 끊어진 것으로 나타났습니다. 내가 Photoshop에서 열어 본 사람은 문서가 손상되었다고 경고했습니다.

변경할 수있는 서버 구성이 있습니까?

나는 브라우저 탭과 그 자연의 것들을 닫음으로써 복제를 시도했지만 여전히 오류를 복제하지는 못했습니다.

우리는 AJAX POST를 통해 업로드하고 있습니다. POST 본문이 업로드 소스입니다.

+0

업로드는 저조한 일이며 파일을 어떻게 저장하고 있습니까? 데이터베이스에 쓰기? 파일을 폴더에 저장하고 데이터베이스 내의 경로를 참조/ –

+0

잘못된 복사본이 폴더에 저장되고 위치를 기록하고 확인하십시오 –

+1

실제로 서버에 POST 요청을하는 코드를 이해하지 않으면 알아낼 수 없다. 데이터는 어떻게 보내 집니까? 플래시, 자바 스크립트, HTML 폼 등? 전에 이와 같은 문제가 발생했지만 일반적으로 청크를 만들어 STDIN으로 전송할 때 수학 오류가 발생했습니다. – phpisuber01

답변

-3

post_max_sizeupload_max_filesize 지시어가 php.ini에 있는데, 잘린 파일의 크기와 값을 비교하여 그 이유를 확인하십시오.

+0

그런 경우라면 50MB의 파일을 쉽게 업로드 할 수 있으며 파일은 실패합니다 때로는 메그보다 적습니다. –

1

로드/네트워킹 문제처럼 들립니다. 사용자가 업로드를 시도하고 서버가 응답하지 않는 대기 시간 문제/시간 초과 문제가 있습니다.

일반적으로 AJAX가 아닌 서버 (PHP가 아닐 수도 있음)입니다. 나는 서버에 오는 패킷의 일부 장소에 방울이 있다고 생각한다. 데이터 센터 (예 : 대역폭 제한) 또는 서버 자체의 제한으로 인해 제한 될 수 있습니다.

다음 구성을 사용하여 서버를 최적화합니다. 이것은 모든 리눅스 배포판에서 작동합니다 :

/etc/sysctl.conf 파일을 편집하십시오. 결국 다음 줄을 추가합니다 :

net.ipv4.tcp_wmem= 10240 87380 12582912 
net.ipv4.tcp_rmem= 10240 87380 12582912 
net.core.rmem_max=12582912 
net.core.wmem_max=12582912 
net.ipv4.tcp_max_syn_backlog=100000 

어떻게 튜닝 리눅스에 당신은 더 나은 이해 IBM에서 다음 매뉴얼을 사용할 수 있습니다 : 나는 로그 것 또한 http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf

,

을 클라이언트의 브라우저 버전. 서버로 전송되는 형식은 AJAX가 브라우저마다 다른 형식에 따라 달라질 수 있습니다. AJAX 코드를 지정하지 않았으므로 AJAX가 파일을 업로드하기 위해 수행하는 작업을 가정하기가 어렵습니다.

+0

고마워요! 내일 사무실에서 이러한 구성 설정의 의미를 더 잘 확인할 수 있습니다. 문제는 모든 브라우저에서 발생합니다. 몇 년 동안 완벽하게 작동했기 때문에 AJAX가 아닌지 의심 스럽습니다. 우리는 서버를 변경했지만 업로드에 영향을주지 않는 것은 아무것도 아닙니다 ... 문제를 일으키는 서버와는 다른 서버 세트였습니다. 그것은 매우 이상했고 우연의 일치는 의심 스럽습니다. –

+0

돌아 오지 못해 죄송합니다. 이에 대한 해결책은이 문제를 해결할 수도 있고,이 문제를 해결하고 사이트를 해독 할 수도 있기 때문입니다. –

관련 문제