Categories
PHP

PHP GD 라이브러리를 이용하여 이미지를 생성하고 출력하기

PHP 의 이미지 작업은 새로운 캔버스를 생성하는 것으로 시작한다.

$canvas = imagecreate(400, 300);

400 과 300 은 이미지의 폭과 높이이다. 단위는 픽셀이다.

이미지에 색상을 할당하는 함수는 imagecolorallocate() 이다.

int imagecolorallocate( GdImage $image, int $red, int $green, int $blue )

이 함수는 GdImage 리소스와 RGB 색상값을 인자로 받아 색상 식별자를 리턴한다. RGB 색상값의 범위는 0 ~ 255 이다.

$red = imagecolorallocate($canvas, 255, 0, 0);

$green = imagecolorallocate($canvas, 0, 255, 0);

$blue = imagecolorallocate($canvas, 0, 0, 255);

이미지에 픽셀 한 개를 그려 보자.

캔버스를 생성한다.

$canvas = imagecreate(400, 300);

캔버스의 배경이 검정색이 되게 한다.

$black = imagecolorallocate($canvas, 0, 0, 0);

imagecolorallocate() 함수는 첫번째 호출 시에는 특별하게 동작한다. 색상 식별자를 리턴하는 동시에 해당 색상으로 캔버스의 배경을 채운다.

$white 색상 식별자에 흰색을 지정한다.

$white = imagecolorallocate($canvas, 255, 255, 255);

캔버스의 (100, 100) 위치에 픽셀 하나를 그린다. 픽셀의 색상은 흰색이다.

imagesetpixel($canvas, 100, 100, $white);

출력 내용이 PNG 이미지라는 정보를 HTTP 헤더에 기록한다.

header(“Content-type: image/png”);

PNG 이미지를 브라우저에 출력한다.

imagepng($canvas);

PNG 이미지를 파일로 저장할 수도 있다. 아래와 같이 저장 경로와 파일 이름을 지정하면 된다.

imagepng($canvas, ‘images/dot.png’);

이미지 리소스를 삭제한다.

imagedestroy($canvas);

이상의 내용을 정리하여 pixel.php 라는 파일에 저장한다. 다음은 pixel.php 파일의 전체 내용이다.

<?php
$canvas = imagecreate(400, 300);
$black = imagecolorallocate($canvas, 0, 0, 0);
$white = imagecolorallocate($canvas, 255, 255, 255);

imagesetpixel($canvas, 100, 100, $white);
header("Content-type: image/png");
imagepng($canvas);
imagedestroy($canvas);
?>

pixel.php 파일을 브라우저로 읽어들인다. 브라우저에 이미지가 표시되는지 확인해 보자.

Categories
Vim

vi 에서 사용자 정의 키 매핑 사용하기

vi 에서 사용자정의 키 매핑을 사용하는 방법을 알아본다.

F8 키를 누르면 현재 날짜와 시간이 입력되도록 해 보자.

vi 의 커맨드 라인에서 아래와 같이 입력한다.

:map <F8> :read !date<CR>

map 은 키 매핑을 정의하는 명령이다.

<F8> 은 F8 키를 누른다는 의미이다.

:read !date<CR> 부분을 살펴보자.

: 는 vi 의 커맨드 라인을 시작한다.

read 는 명령의 출력 결과를 현재 커서 아래에 삽입한다.

!date 는 vi 내부에서 실행되는 date 명령이다.

<CR> 는 엔터 키를 누르는 것과 같다.

아래 명령으로 <CR> 과 같은 키보드 키의 표기법을 확인할 수 있다.

:help key-notation

키 매핑을 정의하고 나서 기본 모드에서 F8 키를 눌러 보자. 현재 커서의 아래 줄에 날짜와 시간이 삽입될 것이다.

Sat 08 Oct 2022 06:24:32 AM KST

키 매핑은 기본 모드에서 사용한다. 입력 모드에서는 효과가 없다.

map 명령만 실행해 보자.

:map

현재 정의되어 있는 모든 키 매핑의 리스트가 출력될 것이다.

커맨드 라인에서 정의한 키 매핑은 해당 키 매핑을 정의한 세션에서만 사용 가능하다. vi 를 재시작하면 사용할 수 없다.

키 매핑을 ~/.vimrc 파일에 등록해 두면 영구적으로 사용 가능하게 된다.

~/.vimrc 파일을 열고 아래 내용을 추가한다.

map <F8> :read !date<CR>

이렇게 해 두면 vi 가 시작될 때마다 해당 키 매핑이 정의될 것이다.

vi 를 재시작하지 않고 ~/.vimrc 파일에 정의한 키 매핑을 사용할 수도 있다.

vi 커맨드 라인에서 아래 명령을 실행하면 된다.

:!source ~/.vimrc

Categories
PHP

PHP 내장 (built-in) 웹 서버 사용하기

PHP 내장 웹서버를 실행시켜 보자.

php -S 192.168.0.101:80

-S 옵션을 통해 웹서버의 IP 주소와 포트 번호를 지정해 주었다. 웹서버의 다큐먼트 (document) 루트 디렉토리를 지정하지 않았으므로 현재 작업 디렉토리가 다큐먼트 루트 디렉토리가 된다.

다큐먼트 루트 디렉토리를 지정해 보자.

php -S 192.168.0.101:80 -t /home/user1/html

/home/user1/html 디렉토리를 다큐먼트 루트 디렉토리로 지정한 것이다.

포트 번호로 디폴트값인 80 번 대신 다른 것을 사용해 보자.

php -S 192.168.0.101:8080 -t /home/user1/html

이런 경우에는 웹서버에 접속할 때 포트 번호를 지정해야 한다. 예를 들면 다음과 같다.

http://192.168.0.101:8080

포트 번호를 지정하지 않으면 웹브라우저는 디폴트값인 80번을 사용한다. 따라서 접속에 실패하게 된다.

PHP 내장 웹서버를 종료하려면 실행 상태에서 Ctrl + C 키를 누르면 된다.

Categories
PHP

우분투 리눅스에 PHP 8 설치하고 설정하기

우분투 리눅스에 PHP 8 을 설치해 보자.

우분투의 패키지 저장소는 아직 PHP 8 을 지원하지 않는다. 이런 경우에는 PPA (Personal Package Archive) 를 사용하면 된다. ondrej/php 는 PHP 8 패키지를 제공하는 PPA 이다.

ondrej/php PPA 를 소스 리스트에 추가한다.

sudo add-apt-repository ppa:ondrej/php

시스템의 패키지 데이터베이스를 업데이트한다.

sudo apt update

PHP 8 패키지를 설치한다.

sudo apt install php8.0

설치가 끝난 후에 PHP 버전을 확인해 보자.

php -v

PHP 익스텐션 (extension) 을 추가로 설치한다.

sudo apt install php8.0-common php8.0-mysql php8.0-gd php8.0-cli php8.0-zip php8.0-curl php8.0-xml php8.0-dev php8.0-imap php8.0-mbstring

PHP 의 설정 파일은 php.ini 이다. 이 파일은 /etc/php/8.0/apache2 디렉토리에 있다.

파일을 연다.

sudo vi /etc/php/8.0/apache2/php.ini

아래 내용을 참고하여 파일을 수정한다. 세미콜론 (;) 뒤의 설명 부분은 추가하지 않아도 된다.

; 스크립트 실행 시간의 최대값. 초 단위이다.
max_execution_time = 60

; 스크립트가 사용할 메모리 최대 용량.
memory_limit = 128M

; POST 데이터의 최대 크기.
post_max_size = 32M

; 업로드 파일의 최대 크기.
upload_max_filesize = 8M

파일을 저장하고 편집기를 닫는다.

PHP 를 새로 세팅했으므로 아파치를 재시작한다.

sudo systemctl restart apache2