The Pursuit of Happyness

PHP 기본 설정에서는 보안상 한번에 업로드 되는 파일 크기를 2MB로 제한하고 있습니다.

이 제한 설정을 변경하기 위해서는 다음과 같이 합니다.


1. php.ini 파일을 vi 에디터 등으로 열어 봅니다. (Ubuntu 14.04 기준 기본 경로 - /etc/php5/apache2/php.ini)

 > vi /etc/php5/apache2/php.ini


2. upload_max_filesize 항목과 post_max_size 항목을 찾아서 원하는 값으로 변경합니다.

이름에서 알수 있듯이 upload_max_filesize 는 php 에서 업로드 할수 있는 최대 파일 크기이고 post_max_size 는 POST 방식으로 전송되는 업로드 파일의 최대 크기 입니다. 

100MB로 크기를 변경한다면, 아래와 같이 적어 주면 됩니다.

 upload_max_filesize = 100M
 post_max_size = 100M

파일 저장후 apache2 (혹은 httpd) 를 재시작하면 바로 적용이 됩니다.









Comment +0

CENTOS 6.4 / PHP 5.3.3

VBbulletin 사용 도중 서버 이전 후 메일이 발송되지 않는 문제가 발생해서 원인을 찾아보니,

로그에 아래와 같은 경고 메시지가 뜨면서 발송이 되지 않고 있었음.


Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.google.com (Permission denied) in /xxxx.php on line xx


원인

대부분의 경우 리눅스 보안설정 SELinux 에서 httpd 에서 네트워크 커넥션을 허용하지 않는 경우이다.


해결책

커맨드 프롬프트에서 다음과 같이 입력 

setsebool httpd_can_network_connect=1

(혹시 setsebool이 path가 결려있지 않은 경우 /usr/sbin/setsebool 을 이용)





Comment +0

PHP mail 보내기 - 파일첨부하기 / 이미지 보여주기

기본적인 메일 보내는 방법은 아래 링크 참고하세요.

http://shineum.tistory.com/56


1. 파일 첨부하기

$mail->AddAttachment("첨부파일 경로 혹은 파일 리소스", "첨부파일 이름");    //  해당 경로의 파일을 지정한 파일 이름으로 첨부


2. 메일에 이미지를 보여주기

- 보여줄 이미지를 유니크한 키를 사용해서 embeded image 로 추가를 해준다.

- embeded 할때 지정한 유니크 키를 src 태그를 사용해서 이미지 링크로 걸어준다.

$mail->AddEmbeddedImage("첨부파일 경로 혹은 파일 리소스", "유니크 키1");

$mail->AddEmbeddedImage("첨부파일 경로 혹은 파일 리소스", "유니크 키2");

$mail->MsgHTML("

<p><img src='cid:유니크 키1'></p>

<p><img src='cid:유니크 키2'></p>

");







Comment +0


PHPMailer 에 대한 새로운 사용법을 새로운 포스트에 남겨두었습니다. 참고하세요.


1. 다음 링크에서 필요한 모듈을 다운로드 받는다. (PHPMailer)

http://code.google.com/a/apache-extras.org/p/phpmailer/

개발자가 코드를 github 로 옮겼습니다. 아래 링크에서 다운로드 받으세요..

=> https://github.com/PHPMailer/PHPMailer

 

2. 다운로드 받은 파일을 적당한 경로에 압축을 푼다.

ex)

/var/www/html/inc/PHPMailer

 

3. 메일 보낼 코드 작성

/var/www/html/mailSample.php

 

<?php

require_once("inc/PHPMailer/class.phpmailer.php");

 

$mail = new PHPMailer(true);

$mail->IsSMTP();

try {

  $mail->Host = "smtp.gmail.com";    // email 보낼때 사용할 서버를 지정

  $mail->SMTPAuth = true;              // SMTP 인증을 사용함

  $mail->Port = 465;                        // email 보낼때 사용할 포트를 지정

  $mail->SMTPSecure = "ssl";        // SSL을 사용함

  $mail->Username   = "GMAIL ACCOUNT";    // Gmail 계정

  $mail->Password   = "PASSWORD";            // 패스워드

 

  $mail->SetFrom('from email address', 'Display Name'); // 보내는 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능)

  $mail->AddAddress('to email address', 'Display Name'); // 받을 사람 email 주소와 표시될 이름 (표시될 이름은 생략가능)

  $mail->Subject = 'Email Subject';        // 메일 제목

  $mail->MsgHTML("Email Content");    // 메일 내용 (HTML 형식도 되고 그냥 일반 텍스트도 사용 가능함)

 

  $mail->Send();                                // 실제로 메일을 보냄

  echo "Message Sent OK<p></p>\n";

} catch (phpmailerException $e) {

  echo $e->errorMessage(); //Pretty error messages from PHPMailer

} catch (Exception $e) {

  echo $e->getMessage(); //Boring error messages from anything else!

}

?>

 

 

 

Comment +1

<?php

function post_request($url, $data) {
// Convert the data array into URL Parameters like a=b&foo=bar etc.
$data = http_build_query($data);

// parse the given URL
$url = parse_url($url);

if ($url['scheme'] != 'http') {
return "Error:Only HTTP request are supported!";
}

// extract host and path:
$host = $url['host'];
$path = $url['path'];
$res = '';

// open a socket connection on port 80 - timeout: 300 sec
if ($fp = fsockopen($host, 80, $errno, $errstr, 300)) {
$reqBody = $data;
$reqHeader = "POST $path HTTP/1.1\r\n" . "Host: $host\r\n";
$reqHeader .= "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-length: " . strlen($reqBody) . "\r\n"
. "Connection: close\r\n\r\n";

/* send request */
fwrite($fp, $reqHeader);
fwrite($fp, $reqBody);

while(!feof($fp)) {
$res .= fgets($fp, 1024);
}

fclose($fp);
} else {
return "Error:Cannot Connect!";
}

// split the result header from the content
$result = explode("\r\n\r\n", $res, 2);

$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';

return $content;
}

// usage
$url =  "http://www.example.com/receiver.php";
$data = array("key" => "value");
$res = post_request($url, $value);

?> 
 

Comment +0

구글코드에 있는 소스

http://code.google.com/p/php-excel-reader/


Comment +0


$text = preg_replace("/\\\\/", "/", $text);

Comment +0

strtotime 에서 2100년이 넘어갈때 제대로 처리하지 못하는 것은 다음의 코드를 응용해서 해결할수 있다.

function dateCompare($dt1, $dt2)
{
        $y1 = substr($dt1, 0, 4);
        $y2 = substr($dt2, 0, 4);

        if ($y1 > $y2) return -1;
        else if ($y1 < $y2) return 1;

        $startPos = 2;
        for($i=0;$i<5;$i++)
        {
                $startPos += 3;
                $v1 = substr($dt1, $startPos, 2);
                $v2 = substr($dt2, $startPos, 2);

                if ($v1 > $v2) return -1;
                else if ($v1 < $v2) return 1;
        }

        return 0;
}

function addYears($dt, $year)
{
        $yr = substr($dt, 0, 4);
        return ($yr + $year) . substr($dt, 4);
}

php

Comment +0

<?php
        foreach($_POST as $key => $value)
        {
                print $key . ":" . $value . "<br>";
        }
?>
php

Comment +0

오늘은 제가 만들어서 사용하는 유용한 함수 하나를 소개하겠습니다.

PHP 로 파일 혹은 폴더를 다루는 경우 사용하는 팁인데,

특정 조건을 만족하는 파일 리스트를 받아와야 하는 경우 glob 함수를 사용합니다.

$fileLists = glob("./*/*.txt");

원래 glob 함수의 옵션에는 폴더명을 읽어오거나 하는 세팅이 정의되어 있지만 아직 제대로 지원해주지 않는다고 합니다..

따라서 파일 리스트가 아닌 폴더 리스트가 필요한 경우에는 다음과 같이 함수를 정의해서 사용하시면 됩니다.

function getFolders($rootDir)
{
$handler = opendir($rootDir);
$rFolders = array(); // 폴더 리스트
$fCounter = 0;  
while ($file = readdir($handler)) 
{
if ($file != '.' && $file != '..')
{
if (is_dir($rootDir."/".$file))
{
$rFolders[$fCounter++] = $file;
}
}
}
closedir($handler);
return $rFolders;
}

유용하게 쓰시길~

Comment +2