세이박스

php upload 용량 늘리기

웹프로그램
업로드시 용량 제한으로 인해 업로드 되지 않는 경우가 있습니다.
php.ini 파일을 수정해주시면 되는데
기본 설정이 보통 2MB 로 되어 있습니다.
php.ini 파일의 설치 경로에 따라 다를 수 있지만 대부분
기본 경로는 /usr/local/php/lib/php.ini 에 보통 설치 합니다.
해당 파일에서 아래 위치 부분들을 수정 해주시면 됩니다.

파일 업로드 적용 여부
file_uploads = On

파일 업로드 최고 용량 지정 MB
upload_max_filesize = 20M

POST상에 전송되는 용량 지정 upload_max_filesize와 동일하게 맡혀 주시면 됩니다.
post_max_size = 20M

파일이 업로드 되는데 걸리는 시간 최대값, 300초면 5분정도이며 무한정 세션을 열어 주면 서버 부하가 많이 걸려 시간을 제한을 둡니다. 인터넷 느린 사용자를 감안해서 조금 넉넉하게 잡아 주시면 됩니다.
예로 20MB 제한을 할경우 20MB 파일을 올려보세요!
max_execution_time = 300

업로드 동안 사용할 메모리? 용량 지정해줍니다.
memory_limit = 20M

수정후 아파치 재시작 하시면 됩니다. 

PHP 제로보드 이미지 한글 파일명 업로드 깨짐 엑박 되는 현상

웹프로그램
 
제로보드에서 이미지 업로드시 파일명이 한글로 되어 있는경우 엑박 (깨짐) 처리 되는경우를 방지 하기 위해 아예 파일명을 숫자로 변경해버리는 방법입니다.
 
수정파일 : write_ok.php
 
수정위치 :
이미지 파일이 업로드 2개까지 가능하니 두군데 적용.
 
 
// 디렉토리를 검사함 <=== 검색 해보시면 두군데가 있을겁니다.
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
위 코드 다음 줄에 아래와 같이 등록해주시면 됩니다.
 
1. 첫번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
 
   // 파일명이 한글인 경우 날짜로 변환
   $temp=explode(".",$s_file_name1);
   $file_name_1=$temp[0];
   for($i=0;$i<strlen($file_name_1);$i++) {
    if(ord($file_name_1[$i])>0x80) {
     $temp1=explode(".",$s_file_name1);
     $s_file_name1 = $reg_date."1.".$temp1[1];
     break;
    }      
   }
 
2. 두번째 위치
 
   // 디렉토리를 검사함
   if(!is_dir("data/".$id)) {
    mkdir("data/".$id,0777);
    @chmod("data/".$id,0706);
   }
   
   $temp=explode(".",$s_file_name2);
   $file_name_2 = $temp[0];
   for($i=0;$i<strlen($file_name_2);$i++) {
    if(ord($file_name_2[$i])>0x80) {
     $temp=explode(".",$s_file_name2);
     $s_file_name2 = $reg_date."2.".$temp[1];
     break;
    }      
   }

PHP 파일 업로드 관련 처리

웹프로그램
//이미지 등록할 폴더가 있는지 체크
 if(!is_dir($dir)) {
  mkdir($dir, 0755); //디렉토리 생성
  chmod($dir, 0755); //소유권 지정 한번더
 }
 
 // 이미지1 등록
 if($_FILES[img1][name]) {
  $filename = strtolower($_FILES[img1][name]);  //파일명을 소문자로 변환
  $ext = strtolower(substr($filename,-3));    //우측에서 3자리 확장자 가져옴
  $img_file1 = time().".".$ext;    //파일명을 Time스템프 값으로 변경
  if($ext == "jpg" or $ext == "gif") {
   move_uploaded_file($_FILES[img1][tmp_name], $dir."/".$img_file1);
   chmod($dir."/".$img_file1, 0704);    //업로드한 이미지 파일 소유권 지정
  } else {
   echo "<script-x>alert('등록 가능한 파일 타입이 아닙니다.\\n (*.gif, *.jpg)');history.back();</script-x>";
   exit();
  }
 }
 
//$content 내용을 test.xml 파일로 저장하고자 할때
$fname = "test.xml"
$content = "abcdefg";
$fp = fopen($fname, 'w');
fwrite($fp, $xml_content);
chmod($fname, 0777);
fclose($fp);

PHP FTP로 파일 업로드

웹프로그램
$ftp_server='kkk.net';//serverip
$conn_id = @ftp_connect($ftp_server);

// login with username and password
$user="kkk";
$passwd="aaa";
$login_result = @ftp_login($conn_id, $user, $passwd);

//directorylike /www.velibaba.com/images
@ftp_chdir($conn_id, "public_html/report_files");

// upload the file
$upload = @ftp_put($conn_id, $filename, $file, FTP_BINARY);

// close the FTP stream
@ftp_close($conn_id);

PHP registart 값 off 후 파일 업로드

웹프로그램

@extract($HTTP_SESSION_VARS);
@extract($HTTP_COOKIE_VARS);
@extract($HTTP_SERVER_VARS);
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_ENV_VARS);

if($_FILES['file']['name']){
$AllowExt='/\.alz|\.txt|\.psd|\.xls|\.gz|\.zip|\.bmp|\.doc|\.exe|\.dat|\.gif|\.htm?|\.hwp|\.pdf|\.ppt|\.rar|\.jp?g|\.tif|\.png/i';
$rename=date("YmdHis");

$saveDir="$DOCUMENT_ROOT/report_files/".date("Ym")."/";

if(!is_dir($saveDir)) {
$oldumask = umask(0);
mkdir($saveDir, 0777); // or even 01777 so you get the sticky bit set
umask($oldumask);

//mkdir($saveDir, 0777);
}

if(!preg_match($AllowExt, $_FILES['file']['name'],$ext)) //확장자 비교
AlertBack('업로드 금지 파일입니다.');

$filename=$saveDir.$rename.$ext[0];

if(!move_uploaded_file($_FILES['file']['tmp_name'],$filename))
AlertBack('파일 업로드를 실패했습니다.');


$filerename="http://".$SERVER_ADDR ."/report_files/".date("Ym")."/".basename($filename);
}

PHP 파일 업로드시 권한 설정

웹프로그램

if(!is_dir($saveDir)) {
$oldumask = umask(0);
mkdir($saveDir, 0777); // or even 01777 so you get the sticky bit set
umask($oldumask);
}

이때...

umask란 file이 생성될 때 사용할 file의 권한에 대해 mask를 인코딩하는 system 변수이다.

보통 3자리로 표현이 되며 각각의 자리는 user, group, other의 권한을 나타낸다.

umake의 값은 3자리의 8진수의 값이며 각각의 값은 1,2,4의 값은 AND 연산한 결과이다.

0 : 사용자에게 모든 권한을 혀용.
4 : 사용자에게 읽기 권한은 주지 않음.
2 : 사용자에게 쓰기 권한을 주지 않음.
1 : 사용자에게 실행 권한을 주지 않음.

간단하게 예를 들어서 설명을 해 보면 umask 022 는 user에게는 모든 권한을 주며, group과 other에는 실행 권한과 읽기 권한만 주는 것이다.

즉 -rwxr-xr-x의 퍼미션을 나타낸다.

그러면 하나의 예를 더 들어 보면 -rxw--x--x 의 퍼미션을 지정하려면 group과 other에게 읽기와 쓰기의 권한을 주지 않는 2,4를 지정하는데 위에서 AND연산의 결과값이기 때문에 6이 된다. 즉 umask 066이 되는 것이다.

PHP 원격으로 FTP 파일 업로드

웹프로그램
일단 서버에 FTP개정이 있어야 한다.

$server_host_1="test.co.kr"; //-->원격서버의 ip주소
$server_port="21"; //-->원격서버의 port
$server_id="test"; //-->원격서버의 서버id
$server_pw="testpwd"; //-->원격서버의 서버password

//원격서버에 연결한다.
if(!($fc_1 = ftp_connect($server_host_1, $server_port))) die("$server_host : $server_post - connect failed");

//원격서버에 로그인한다.
if(!ftp_login($fc_1, $server_id, $server_pw)) die("$server_id - login failed");

//업로드할 폴더로 이동한다.
$server_dir = "/home/public_html/test/";
ftp_chdir($fc_1, $server_dir);

//파일을 업로드 한다.
if(!ftp_put($fc_1, $upload_img_name, $upload_img, FTP_BINARY))
{

echo" <script name=javascript> window.alert ('파일을 지정한 디렉토리로 복사 하는 데 실패했습니다._1');
//history.go(-1)
</script>";
exit;

}

//FTP를 닫는다
ftp_quit($fc_1);