아파치와 PHP 설정 때문인지, 데이터가 커지면 쓰기가 제대로 되
글쓴이: muruu / 작성시간: 수, 2003/08/13 - 5:01오후
APM 설정해서 대학내 리눅스 서버를 관리하고 있는 초보 운영자입니다.
번거롭더라도, 아래 링크를 따라 한 번 가보시면 상황을 쉽게 파악하실 수 있을 것 같습니다.
http://jus.snu.ac.kr/~muruu/zboard/zboard.php?id=europe&no=12
첨부한 jpg 파일이 중간중간 깨지면서 이상하게 나옵니다. 원본 파일은 50킬로바이트 정도였는데 업로드하니까 100킬로바이트가 넘네요. 그림 파일만 그런 것이 아니라 텍스트가 너무 길어져도 중간에 짤리면서 일부분이 계속 반복되는 에러가 발생합니다.
http://jus.snu.ac.kr/~muruu/zboard/zboard.php?id=europe&no=11
제로보드에서 데이터를 받아서 MySQL DB 로 전송하는 과정에서 에러가 발생하는 것 같은데.. 첨부파일은 제로보드 아래 data 디렉토리에 따로 저장되니까 MySQL 과는 직접적인 관련이 없는 것 같기도 하고.. 제로보드 문제인지... 서버 문제인지... 아파치 문제인지... PHP 설정 때문인지... ㅠ.ㅠ;;;
이 문제만 해결되면 되는데.. 며칠동안 고민해 봐도 답이 안나와서 문의드려 봅니다.
ps. 여기까지 읽어주셔서 정말 고맙습니다.. ㅜ.ㅜ;;
Forums:
아파치 사용버전과 phpinfo()의 내용을 알아야...정확하게 알 수
이런 증상은 개별적으로 어떤 증상이다라고 꼭 집어서 말씀드리기는 어렵습니다.
다만 아파치 자체의 문제가 아닐까 생각됩니다. 아파치가 잘못 빌드된 경우라든지 혹은 php 의 문제일 가능성이 큽니다. php에서 패킷을 받아서 DB에 넣기전에 따로 파일을 열어서 저장해보시기 바랍니다.
========================================
* The truth will set you free.
정보를 더 알려드릴께요...
아파치 버전은 2.0 이고, php는 4.2.2 입니다.
더 자세한 phpinfo() 정보는, 번거로우시더라도 아래 링크로 가시면 보실 수 있어요.
http://jus.snu.ac.kr/php_info.php
일단 아파치와 php 문제라고 하시니 아파치와 php를 새로 깔아볼까 싶네요. 정말 고맙습니다. 지금까지는 어떤 문제인지조차 파악이 안되어서 많은 시행착오를 겪고 있었거든요. 조금은 길이 보이네요.
"We are what we pretend to be. So we must be careful what we pretend to be." - Kurt Vonnegut
저도 같은현상에 괴로워하며 .... 저는 redhat 9를 그냥 설치했?
redhat 9 rmp으로 설치한 apache와 php에서 file upload시 파일 사이즈가 모두 이상하게 커지고 원 파일자체가 깨지고 마는데.. 쩝.
자세히 고민하고 또 고민해도 아무래도 이 이유는 binary가 text 처리되어 파일이 upload되는 것 같은데. 이유를 모르겠습니다.
그래서 제가 아는 상식선에서 별짓을 다해봤는데.
예를 들면 httpd.conf 에서
Default_Type 도 바꾸어 보았는데 안되구.
php.ini 에서
default_mimetype도 바꾸어서 해보았는데.
역시 안되더군요
좀더 고민하던중
TypesConfig /etc/mime.types
도 살펴보았는데.
application/octet-stream bin dms lha lzh exe class so dll
이상이 없더군요.
문제가 되는 부분(?)이
httpd.conf에 이부분인데.
MIMEMagicFile conf/magic
이것은 설명서가 없어서 제 지식으로는 알수가 없어 손을 못대고 있습니다.
영문서라도 있으면 어케 시도를 해보고 싶은데. 도통 개념이 안잡혀서...쩝.
문제가 되는지 안되는지도 모르겠구.
다음은 이부분인데.
php.ini
-------------------------------------------------------------
always_populate_raw_post_data boolean
항상 $HTTP_RAW_POST_DATA 변수를 선언합니다.
allow_webdav_methods boolean
PHP 스크립트에서 WebDAV http 요청(즉, PROPFIND, PROPPATCH, MOVE, COPY 등등..)을 핸들링할 수 있게 합니다. 이 요청들로부터 포스트 데이터를 얻기 원한다면, always_populate_raw_post_data도 설정해야 합니다.
--------------------------------------------------------------
이게 저는 선언되어 있지 않아서 에라 뭔 설명도 없구 해서 선언을 해보고 했는데. 역시 안됩니다.
제가 너무 몰라도 한참 모른거 같은데.. 뭐가 문제일까요.
그래서 제가 테스트로 작성해서 실험을 했던 php를 올려 보냅니다.
참고로 저는 현재 10M이사이 올라가도록 설치되어 있습니다.
그래서 테스트 해보니 올라가기는 하는데. binary가 아닌 다른 형식으로 변해 버린 거같은데... 쩝. 428,728사이즈의 실행 파일을 올리면 849,632가 되면서 실행 불가능한 파일이 되어 버립니다.
그런데 강제로 서버에 ftp로 올려서 다운받아보면 정상인 것으로 보아 다운로드 상에는 정상처리되는데 유독 업로드에서 깨지는 것이 이상합니다. 제 소스에 문제인지... 참고로 아래의 것은 php.net에 있는 document 에서 발췌해서 테스트 했는데도 이상이 생김.
참고로 allco.wowdns.com/index.php
<?php
// 4.1.0 이전의 PHP에서는, $_FILES 대신에 $HTTP_POST_FILES를 사용해야
// 합니다. 4.0.3 이전의 PHP에서는, move_uploaded_file 대신에 copy()와
// is_uploaded_file()을 사용하십시오.
if ($_POST['mode']=="up"){
$uploaddir = '/home/www/html/uploads/';
$uploadfile = $uploaddir.$_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
print "파일이 존재하고, 성공적으로 업로드 되었습니다.";
print "추가 디버깅 정보입니다:\n";
print_r($_FILES);
} else {
print "파일 업로드 공격의 가능성이 있습니다! 디버깅 정보입니다:\n";
print_r($_FILES);
}
print "</pre>";
}
?>
<form enctype="multipart/form-data" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000">
이 파일을 전송합니다: <input name="userfile" type="file">
<input type="hidden" name="mode" value="up">
<input type="submit" value="파일 전송"
</form>[url][/url]
아! 그 문제.
작은 화일들은 문제가 없고 대부분 문제가 큰 화일에서 문제를 발생하고...
올라간 화일을 유심히 살펴보면 화일 내용이 전체 올라가
있지도 않고 일부 내용이 불규칙하게 반복되고... 그렇죠?
저도 무지하게 마음 고생했습니다.
한 동안은 PHP의 버그나 마임타입의 문제라고 생각했는데
문제의 원인은 설정화일에 있었습니다.
PHP에 관한 설정이 httpd.conf에도 있지만
별도로 /etc/httpd/conf.d/php.conf에도 있습니다.
다른 관리자가 설정을 만졌는지 원래 그런 것인지 모르겠지만
이 두 화일에 php와 관련해서 중복된 설정이 있더라구요.
그 중복된 부분을 제거하니 문제가 사라지더군요.
저도 기억이 조금 가물가물해서 정확하게 그것이 무엇이지는 모르겠지만
어차피 PHP에 관한 것은 얼마 되지 않으니 유심히 살펴 보시면
금방 찾을 것입니다. 아주 기초적이고 단순한 것이였습니다.
얼핏 php로 작동하는 화일의 확장자를 지정하는 부분이 중복되었던 것으로 기억됩니다.
조르바와 함께 춤을....
드디어 해결 고맙습니다.
conf.d/php.conf 에 *.php 에 대한 설정이 있는데.
또한번 제가 httpd.conf에 필요에 의해 아래를 추가 했는데.
그게 문제
AddType application/x-httpd-php
.php는 이미 설정되어 있으니 .php는 빼고 .php3 기타 등등을 설정하면 되더라구요
댓글 달기