첫째로 : 저는 충분히 위험한 PHP를 알고 있고, 서버 관리에 대해 충분히 잘 알고있는 저급 웹 디자이너입니다. 네가 아주 분명하지 않으면 너를 이해하지 못할거야!.exe 파일이 서버에서 다운로드 될 때 손상됩니다.
설정 : 클라이언트가 특정 디렉토리에 파일을 업로드하는 웹 사이트를 설정했으며,이 파일은 사용자가 다운로드 할 수 있도록 PHP를 통해 제공됩니다. 파일은 일반적으로 50MB 이상의 실행 파일입니다. 클라이언트는 사용자가 압축을 풀 수있을만큼 정통하지 않다고 느끼기 때문에 압축하지 않으려 고합니다. 아래의 php를 사용하여 다운로드 대화 상자를 강제하고 파일이있는 디렉토리를 숨 깁니다.
차이가 있다면 Linux 서버입니다.
문제 : 사용자가 파일을 다운로드하려고하면 특정 파일이 손상됩니다. 실행 파일이지만 클릭하면 빈 DOS 창이 열립니다. 원본 파일은 다운로드하기 전에 완벽하게 열립니다. 똑같은 다운로드 절차를 거친 유사한 파일이 몇 가지 있으며 그 중 일부는 정상적으로 작동합니다.
내가 시도한 것들 : 압축 파일을 업로드 한 다음 서버에서 압축을 풀어 업로드 중에 손상되지 않았는지 확인하고 운이 없었는지 확인했습니다.
원본 파일의 바이너리 코드를 다운로드 한 파일과 비교해도 동일합니다. 따라서 파일이 실수로 파일에 아무 것도 삽입하지 않습니다.
내 downloadFile 함수의 헤더에 문제가있을 수 있습니까? 작업을위한 테스트 - :
downloadFile("../DIRECTORY/files/$filenamereplace","$filenamereplace");
function downloadFile($file,$filename){
if(file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
@ flush();
readfile($file);
exit;
}
}
ETA위한 추가적인 정보 : 나는 정말 ($의 filenamereplace 다른 곳에서 정의) 관련이있는 경우
이
는, 다운로드의 PHP입니다 ...이 하나의 문제를 해결하는 방법을 잘 모르겠습니다/작동하지 않는 파일이 동일한 컴퓨터에서 수행되었습니다. - 차이가 나는 경우 원본 파일에 사용자 지정 아이콘이 있습니다. 다운로드 후에는 파일에 일반 빈 문서 아이콘이 있습니다.추가 정보 :이 정보가 중요하다고 생각합니다. 방금 파일을 직접 다운로드하려고 시도했습니다 (위의 다운로드 기능을 트리거하는 다운로드 링크를 우회하기 위해). URL로 가서 다운로드하는 방식으로 파일을 다운로드하면 다운로드 한 파일이 작동합니다. 그래서 다운로드 기능과 관련이 있다고 생각합니다. 근데 뭐??
3/17 주요 교정 - 그리고 RESOLVED- 그래서 오늘 아침에 일어 났는데 그것은 어쩌면 내가 잘못 파일을 비교하는 것을 떠올랐다. (나는 그들을 다시 바이너리 텍스트로 저장했다. 그리고 그 다음에를 비교했다. 나는 비교 프로그램이 실제 exe 파일을 가져 와서 비교할 것을 몰랐다.) 오늘 아침에 실제 exe 파일을 비교해 보았습니다. 은의 차이점이 있습니다. 파일의 첫 번째 줄에 삽입 된 PHP 코드 한 줄이있었습니다. 나는 PHP를 조정하고 문제가 해결되었습니다. (필자가 인용 한 코드에서 teh $ filenamereplace 변수를 정의한 if/else 문에서 온 것입니다.) 모든 도움을 주신 것에 대해 다시 한 번 감사 드리며, 파일의 내용이 동일하다고 주장하면서 오해하실 수 있습니다.
헤더를 플러시하지 않아도된다고 생각합니다. 일부 16 진수 편집기는 파일을 비교할 수 있습니다 –
"@ flush(); 그럼, 라인? 헤더를 비우는 것이 문제의 원인이 될 수 있습니까, 아니면 그냥 필요하지 않다고 말하는 것입니까? (솔직히 실제로 무엇을하는지 모르겠다 ...) – Kerri
설명의 한 부분 - 다운로드 한 버전이 실패한 동일한 컴퓨터에서 원본 파일 (사전 업로드)을 열 수 있습니까? 특정 기계 관련 문제를 제거하기 위해? 비트가 동일하고 다른 exes가 잘 다운로드되면 환경 적 (예 : 컴퓨터) 구성 문제를 조사해야 할 필요가있는 것 같습니다. – Eric