1. OPcache 정보 보기

<?php
$status = opcache_get_status();
echo json_encode($status, JSON_PRETTY_PRINT);
?>

 

 

2. 항목 설명

The opcache_get_status function in PHP returns an associative array containing information about the current status of the OPcache (Opcode Cache). Each key in the array represents a different aspect of the OPcache status. Here are some common items that you might find in the opcache_get_status results:

  1. opcache_enabled:
    • Description: Indicates whether OPcache is enabled or not.
    • Possible Values: true if enabled, false if disabled.
  2. cache_full:
    • Description: Indicates whether the OPcache shared memory is full.
    • Possible Values: true if the shared memory is full, false otherwise.
  3. restart_pending:
    • Description: Indicates whether a restart of the OPcache is pending.
    • Possible Values: true if a restart is pending, false otherwise.
  4. restart_in_progress:
    • Description: Indicates whether a restart of the OPcache is currently in progress.
    • Possible Values: true if a restart is in progress, false otherwise.
  5. memory_usage:
    • Description: Provides information about memory usage in the OPcache (unit : bytes).
    • Items:
      • used_memory: Amount of memory used by the OPcache.
      • free_memory: Amount of free memory in the OPcache.
      • wasted_memory: Amount of memory wasted by fragmentation.
  6. interned_strings_usage:
    • Description: Information about interned strings, which are unique string values stored in a single memory location to reduce duplication.
    • Items:
      • buffer_size: Size of the interned strings buffer.
      • used_memory: Amount of memory used by interned strings.
      • free_memory: Amount of free memory in the interned strings buffer.
      • number_of_strings: Number of interned strings.
  7. opcache_statistics:
    • Description: Provides statistical information about the OPcache.
    • Items:
      • num_cached_scripts: Number of scripts cached by OPcache.
      • num_cached_keys: Number of cache keys (unique script identifiers).
      • max_cached_keys: Maximum number of cache keys allowed.
      • hits: Number of cache hits.
      • misses: Number of cache misses.
      • blacklist_misses: Number of blacklist misses (scripts excluded from caching).
      • blacklist_miss_ratio: Ratio of blacklist misses to total cache misses.
      • opcache_hit_rate: Ratio of cache hits to total access attempts.

These are some of the common items you might find in the opcache_get_status results. The exact list may vary depending on your PHP version and configuration. Always refer to the PHP documentation for the specific version you are using for the most accurate and up-to-date information.

'개발 > PHP' 카테고리의 다른 글

[PHP] PHP의 철학  (0) 2024.02.22
[PHP] Composer 사용법  (0) 2023.08.08
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

by ChatGPT

1. 실용성

PHP는 실용적이고 접근 가능한 스크립팅 언어로 설계되었습니다. 사용 편의성과 빠른 개발을 우선시하므로 웹 개발에 널리 사용됩니다. 구문은 상대적으로 간단하고 관대하므로 개발자는 복잡성을 최소화하면서 작업을 수행할 수 있습니다.


2. 웹 중심

PHP는 원래 웹 개발용으로 설계되었으며 동적 웹 페이지를 만드는 데 탁월합니다. 주요 사용 사례는 HTML 콘텐츠를 동적으로 생성하는 서버 측 스크립팅이며 웹 서버와 원활하게 통합됩니다.


3. 아무것도 공유하지 않는 아키텍처

앞서 언급했듯이 PHP는 각 요청이 독립적이고 요청 간에 공유 상태가 없는 비공유 아키텍처를 따릅니다. 이 접근 방식은 개발 모델을 단순화하고 더 나은 확장성을 지원합니다.

 

4. 오픈 소스 및 커뮤니티 중심

PHP는 오픈 소스이며 개발은 커뮤니티 기여에 크게 의존합니다. PHP 커뮤니티는 개발자들이 토론, 버그 보고, 확장 기능 및 프레임워크 생성을 통해 언어 성장에 적극적으로 기여하는 협업 정신으로 잘 알려져 있습니다.

 

5. 유연성

PHP는 유연성으로 유명합니다. 절차적 프로그래밍 패러다임과 객체 지향 프로그래밍 패러다임을 모두 지원하므로 개발자는 자신의 요구에 가장 적합한 스타일을 선택할 수 있습니다. 이러한 유연성 덕분에 PHP는 다양한 프로젝트에서 널리 채택되고 사용됩니다.

 

6. 상호 운용성

PHP는 다양한 데이터베이스, 웹 서버 및 외부 라이브러리와 쉽게 통합될 수 있습니다. 데이터베이스와의 상호 작용을 광범위하게 지원하므로 데이터베이스 기반 웹 애플리케이션에 대한 일반적인 선택입니다.

 

7. 진화와 적응성

PHP는 초기부터 정기적인 릴리스를 통해 새로운 기능, 개선 사항 및 성능 향상이 도입되면서 크게 발전해 왔습니다. 언어는 변화하는 웹 개발 동향과 표준에 적응해 왔습니다.

 

8. 순수함보다 실용주의

PHP는 프로그래밍 원칙을 엄격히 준수하는 것보다 실용적인 솔루션을 우선시하는 경우가 많습니다. 이러한 실용주의는 신속한 개발과 배포가 중요한 웹 개발 분야에서 인기를 얻는 데 기여했습니다.

'개발 > PHP' 카테고리의 다른 글

[PHP] OPcache 정보 보기  (0) 2024.02.24
[PHP] Composer 사용법  (0) 2023.08.08
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

Composer란

Composer(컴포저)란 PHP에서 사용되는 프로젝트 기반 의존성 관리 툴이다. 이는 프로젝트의 의존성 라이브러리들을 기술하고, 관리(설치/업데이트)한다.

 

의존성 관리

컴포저는 Yum이나 Apt같은 패키지 매니저가 아니다. 물론, 컴포저가 '패키지'나 라이브러리들을 다루지만, 이는 프로젝트 기반의 매니징을 하고, 의존성 라이브러리들을 프로젝트 안의 디렉토리에 설치한다. 기본적으로, 컴포저는 어떤 것도 전역 위치에 설치하지 않는다.

 

가정:

  • 여러 라이브러리에 의존성을 가지는 프로젝트가 있고
  • 어떤 라이브러리는 또 다른 라이브러리에 의존성을 가진다

Composer:

  • 의존성을 가지는 라이브러리를 명시할 수 있게 해준다.
  • 어떤 패키지의 어떤 버전이 필요한지 찾아서, 프로젝트 폴더 안에 설치해준다.
  • 모든 의존성 라이브러리들을 하나의 명령으로 업데이트 할 수 있다.

 

최소 요구사양

최신버전의 Composer는 PHP 7.2.5를 요구한다.

파일 압축 해제를 위해, 7z(또는 7zz), gzip, tar, untar, unzip, xz을 사용한다.

 

설치

Composer 실행파일 다운로드 페이지 : https://getcomposer.org/download/

(composer.phar 파일을 다운받으면 된다.)

phar 파일이란?
배포를 쉽게 하기 위해 php 파일들과 관련 리소스들을 하나로 묶어 놓은 파일이다.

 

사용

Composer를 프로젝트에 사용하려면, composer.json 파일이 있어야 한다.

 

Composer.json

{
    "require": {
        "monolog/monolog": "2.0.*"
    }
}
  • 이파일에 프로젝트에서 사용하는 의존성과, 다른 메타데이터들을 기술한다. 
  • composer.json은 보통 프로젝트의 최상위 디렉토리 안에 위치해야 한다.
  • "require" 키 : require 키에 의존성 라이브러리들 정보를 기술한다.
    • 패키지 이름 : vendor 이름과 프로젝트 이름의 조합으로 이루어진다. (예: json 라이브러리를 만든 vendor가 둘일 경우, 패키지 이름은 igorw/json 또는 seldaek/json 등이 될 수 있다.)
    • 패키지 버전 제한 : 패키지 버전을 2.0.* 이라고 기술 하는 경우, 2.0 브랜치의 어떤 버전도 사용 가능하다.  (>=2.0 <2.1 사이의 버전을 사용함)

 

의존성 설치

의존성 라이브러리들을 업데이트 하기 위해, 프로젝트 폴더 안에서 update 명령을 사용한다.

 

php composer.phar update

 

  • 위 명령을 수행하면, composer.json 파일 안의 모든 의존성 관련 정보를 파악하여 해당 버전의 composer.lock 파일을 생성한다. (이 composer.lock 파일을 버전관리 시스템에 commit 하는 것을 권장함)
  • 그 후 암시적으로 install 명령을 수행하여 해당 의존성 라이브러리들을 다운받는다.

이미 composer.lock 파일이 존재 하는경우(버전관리 시스템에 커밋된 lock 파일을 받은 경우), install 명령을 해주면 된다.

php composer.phar install

끝. 프로젝트 폴더의 vendor라는 폴더 하위에, 의존성 라이브러리들이 설치된다.

 

 

참고

https://getcomposer.org/doc/00-intro.md

'개발 > PHP' 카테고리의 다른 글

[PHP] OPcache 정보 보기  (0) 2024.02.24
[PHP] PHP의 철학  (0) 2024.02.22
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

OPcache란

미리 컴파일된 바이트코드를 공유 메모리에 저장함으로써, 매 요청마다 PHP가 스크립트를 로딩하고 파싱하는 부분을 제거하여 PHP의 성능을 향상시키는 모듈이다.

OPcache improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.

 

OPcache 설치하기

yum install php-opcache

 

OPcache 설정하기

/etc/php.d/10-opcache.ini 설정파일 내용을 아래와 같이 변경해준다.

(각 성능에 관련된 값은 디폴트를 쓰려면 주석 해제하지 않으면 되고, 아니면 서버에 맞게 조정하면 된다.)

- opcache.enable = 1 // 0 이면 비활성화

- opcache.validate_timestamps = 1 // 0이면 변경사항을 반영할 때 수동으로 opcache를 reset 하거나 웹서버를 재부팅 해야 한다.

; Enable Zend OPcache extension module
zend_extension=opcache

; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0

; The OPcache shared memory storage size.
opcache.memory_consumption=512

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=32

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=1000000

; The maximum percentage of "wasted" memory until a restart is scheduled.
;opcache.max_wasted_percentage=5

; When this directive is enabled, the OPcache appends the current working
; directory to the script key, thus eliminating possible collisions between
; files with the same name (basename). Disabling the directive improves
; performance, but may break existing applications.
;opcache.use_cwd=1

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=1

 

php-fpm 재시작하기

php-fpm을 사용중이라면, 재시작한다. (사용 안하면 패스)

systemctl restart php-fpm

 

웹서버 재시작하기

systemctl restart httpd

 

동작 확인

phpinfo를 통해, opcache가 제대로 동작하고 있는지 확인한다.

PHP-FPM (FastCGI Process Manager) 이란?

PHP 스크립트를 실행하는 데 사용되는 PHP용 대체 FastCGI 구현입니다. 이를 통해 PHP 프로세스를 보다 잘 관리할 수 있으며 높은 트래픽 부하를 보다 효율적으로 처리할 수 있도록 하여 PHP 애플리케이션의 성능을 향상시킬 수 있습니다. PHP-FPM은 일반적으로 Nginx 및 Apache와 같은 웹 서버와 함께 사용되어 동적 웹 페이지를 제공하고 보다 빠르고 안정적이며 효율적인 PHP 환경을 제공합니다.

 

웹서버는 정적인 HTML 웹문서 파일만을 처리하며, 동적인 페이지 구현을 위해서는 외부 프로그램을 이용해야 합니다.

이를 위해 CGI 방식을 사용할 수 있는데, 이는 요청할 때마다 새로운 프로세스를 생성하여 구동하기에 부하가 많아지면 처리 속도가 느려질 수 있습니다.

이를 해결하기 위해 나온 것이 FastCGI 방식으로, 이미 생성한 프로세스를 재활용하여 처리속도가 빠릅니다.

PHP FastCGI Process Manager인 php-fpm은 이 FastCGI 방식을 구현한 것으로, CGI와 비교해 보다 빠른 성능을 보여줍니다.

 

PHP-FPM 적용방법

Apache에서 PHP-FPM을 사용하려면 PHP와 PHP-FPM을 모두 설치한 다음 Apache가 PHP-FPM과 함께 작동하도록 구성해야 합니다. 

1. PHP, PHP-FPM 설치

apt-get 또는 yum과 같은 운영 체제의 패키지 관리자를 사용하여 PHP를 설치하거나 소스에서 컴파일할 수 있습니다.

yum install php php-fpm -y


2. PHP-FPM 구성

php-fpm.conf 파일을 편집하여 PHP-FPM을 구성해야 합니다. 이 파일에는 수신 주소, 수신 포트 및 기타 PHP-FPM 옵션과 같은 설정이 포함되어 있습니다.

- www.conf의 내용을 아래와 같이 변경 (socket 방식 연동)

# vi /etc/php-fpm.d/www.conf

listen = /var/run/php-fpm/default.sock

listen.owner = apache
listen.group = apache

※ 참고
php-fpm 연동은 1) 소켓 방식과 2) tcp port 방식이 있는데, socket 방식이 더 빠르다고 함.
같은 서버 내에서 연동하는 경우는 socket 방식을,
다른 서버와 연동해야 하는 경우는 tcp port 방식을 사용하면 될 듯.

 

- 폴더 생성

/var/fun/php-fpm 폴더가 없다면 생성합니다.

mkdir /var/run/php-fpm


3. Apache 구성

mod_fastcgi 또는 mod_fcgid Apache 모듈을 설치한 후 Apache conf 파일을 수정해야 합니다.

- mod_fcgid 설치

yum install mod_fcgid -y

- php.conf 에 아래 내용 추가

# vi /etc/httpd/conf.d/php.conf

<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
    	ProxySet disablereuse=off
</Proxy>
 
<FilesMatch \.php$>
	SetHandler proxy:fcgi://php-fpm
</FilesMatch>
 
AddType text/html .php
 
DirectoryIndex index.php
 
<FilesMatch \.phps$>
	SetHandler application/x-httpd-php-source
</FilesMatch>

 

4. SSL 구성

SSL 보안접속을 사용하고 있다면, SSL conf 파일도 수정해주어야 합니다.

- ssl.conf 파일도 아래 내용 반영 (파일 마지막에, VirtualHost 태그 닫히기 전에 php-fpm 설정 내용 추가)

# vi /etc/httpd/ssl.conf

# [...]
#   Per-Server Logging: 
#   The home of a custom SSL log file. Use this when you want a 
#   compact non-error SSL logfile on a virtual host basis. 
CustomLog logs/ssl_request_log \ 
         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 
         
# configuration for php-fpm start
<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm"> 
  ProxySet disablereuse=off 
</Proxy> 
<FilesMatch \.php$> 
  SetHandler proxy:fcgi://php-fpm 
</FilesMatch>
# configuration for php-fpm end

</VirtualHost>

 

5. php-fpm 서비스 등록 및 실행

systemctl enable php-fpm
systemctl start php-fpm

 

6. apache 재시작

systemctl restart httpd

 

7. 사이트 접속하여 정상 동작하는지 확인

 

참고

https://docs.rockylinux.org/ko/guides/web/php/

https://wallydev.com/posts/4602d549-ecbd-11ed-a8d7-06aa2d67633f

https://www.baragi.net/bbs/board.php?bo_table=dev&wr_id=8771

https://serverok.in/centos-7-apache-use-php-fpm

https://webhostinghero.org/centos-apache-php-fpm/

 

윈도우 운영체제에서 php 7.4를 설치하고, VScode 디버깅 설정하는 방법을 정리한다.

 

PHP 7.4 설치

1. 아래 사이트에서 windows용 php를 다운받는다. (설치할 버전)

https://windows.php.net/download/

 

2. 적절한 폴더에 압축을 해제한다.

예) C:/APM/php-7.4.33-Win32-vc15-x64

 

3. httpd.conf 파일 설정에서, php 경로를 변경해준다.

PHPIniDir "C:/APM/php-7.4.33-Win32-vc15-x64"
LoadModule php7_module "C:/APM/php-7.4.33-Win32-vc15-x64/php7apache2_4.dll"
AddType application/x-httpd-php .html .php
AddHandler application/x-httpd-php .php

 

4. 고급 시스템 설정에 php 경로를 등록해준다. (어디서든 php.exe 실행 가능하게 하려면)

예) C:/APM/php-7.4.33-Win32-vc15-x64 추가

 

5. 아파치를 재시작한다.

서비스 > Apache2.4 다시시작

 

VScode 에 php 디버깅 설정

1. cmd 창에 "php -i" 입력하면 phpinfo 내용이 쭉 나온다. 전부 복사한다.

 

2. https://xdebug.org/wizard 사이트에 가서 해당 내용을 붙여넣는다.

 

3. Analyse my phpinfo() output 버튼을 클릭한다.

 

4. 내 정보가 나오고, 해당 내용에 맞는 dll을 다운받을 수 있는 녹색 링크가 나온다. 클릭해서 다운받는다.

5. php 압축 푼 폴더 하위에 해당 dll을 복사한다.

예) C:\APM\php-7.2.34-Win32-VC15-x64\ext\php_xdebug-3.0.0-7.2-vc15-x86_64.dll

 

6. cmd 창에 php -m 입력해서 [PHP Modules]와 [Zend Modules]에 Xdebug가 있는지 확인한다.

 

7. php.ini 파일 설정을 변경한다.

- 기존 설정이 있는 경우, 동일하게 맞춤

- 디버깅을 위해, 아래와 같이 xDebug 설정을 추가한다.

예) C:/PHP/php-7.4.33-Win32-vc15-x64/php.ini 

[xDebug]
zend_extension = C:/APM/php-7.4.33-Win32-vc15-x64/ext/php_xdebug-3.1.6-7.4-vc15-x86_64.dll
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host = localhost
xdebug.client_port = 9003
xdebug.output_dir = C:/APM/php-7.4.33-Win32-vc15-x64/tmp

 

8. 아파치를 재시작한다.

 

9. VScode를 열어, launch.json 파일 내용을 아래와 같이 수정한다.

(위 php.ini 에서 설정한 port 가 일치하도록 하고, php가 설치된 경로를 넣어준다.)

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "runtimeExecutable": "C:/APM/php-7.4.33-Win32-vc15-x64/php.exe",
            "request": "launch",
            "port": 9003
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "runtimeExecutable": "C:/APM/php-7.4.33-Win32-vc15-x64/php.exe",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9003
        },
        {
            "name": "Launch Index",
            "type": "php",
            "runtimeExecutable": "C:/APM/php-7.4.33-Win32-vc15-x64/php.exe",
            "request": "launch",
            "program": "${workspaceRoot}/index.php",
            "cwd": "${workspaceRoot}",
            "port": 9003
        }
    ]
}

 

10. VScode에서 settings.json을 열어 php path를 아래와 같이 바꾸어준다.

    "php.validate.executablePath": "C:/APM/php-7.4.33-Win32-vc15-x64/php.exe",
    "php.validate.enable": false,
    "php.executablePath": "C:/APM/php-7.4.33-Win32-vc15-x64/php.exe",

 

11. 테스트용 index.php 파일 만들고, VScode에서 F5 눌러 디버깅 모드 실행한다.

 

12. 웹 브라우저에서 index.php를 실행해본다. 디버깅이 걸리면 성공!

현재 워드프레스 6.1.1에서 지원하는 안정적인 최신버전은 php 7.4이다.

(php 8.x 는 beta support 중이라.. 바로 쓰기는 불안하다)

 

이에 기존 php 7.2 버전을 php7.4로 업그레이드 하는 작업을 했다.

(운영체제 : CentOS 7)

 

1. 기존 PHP 삭제 

- 현재 설치된 php 리스트 확인

yum list installed | grep php

- php 삭제

yum remove php-*
위 명령어로 삭제가 안될때, 
yum remove --setopt=clean_requirements_on_remove=1 php php-common php-cli php-devel php-fpm php-gd php-json php-ldap php-mbstring php-mysqlnd php-odbc php-pdo php-imagick php-snmp php-soap php-xml php-xmlrpc php-opcache

 

2. EPEL 설치

 - EPEL(Extra Packages for Enterprise Linux) 각종 패키지의 최신 버전을 제공하는 저장소

yum install epel-release yum-utils -y

 

3. 기존 php7.2 remi 저장소 비활성화

yum-config-manager --disable remi-php72

 

4. php7.4 저장소 활성화

yum-config-manager --enable remi-php74

 

5. yum install 로 php7.4 버전 및 모듈들 설치

yum install php php-common php-cli php-devel php-fpm php-gd php-json php-ldap php-mbstring php-mysqlnd php-odbc php-pdo php-imagick php-snmp php-soap php-xml php-xmlrpc php-opcache -y

 

6. 설치된 php 버전 확인

php -v

 

7. php.ini 수정

기존 설정이 있다면, 그대로 변경해줌

 

8. 아파치 재시작

systemctl restart httpd

9. 사이트 정상 동작하는지 확인

 

참고

https://www.ezeelogin.com/kb/article/how-to-upgrade-php-to-7-4-on-centos-7-393.html

https://sailer.tistory.com/entry/Cent-OS-7-PHP-%EB%B2%84%EC%A0%84-%EC%98%AC%EB%A6%AC%EA%B8%B054-74

1. 문제 상황

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted 가 뜨는 경우가 있다.

 

2. 원인

메모리 부족으로 추정된다.

* PHP의 메모리 제한 기본값은 128MB

 

3. 해결

PHP 설정파일에서 메모리 제한을 수정 후(더 큰 값으로 늘림), 웹서버를 재시작 해주면 모든 PHP 파일에 적용된다.

아래는 CentOS, Apache를 사용하는 경우의 예이다.

Bash

vi /etc/php.ini

php.ini

memory_limit = 256M

Bash

systemctl restart httpd

 

참고

https://zetawiki.com/wiki/PHP_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%B6%80%EC%A1%B1

+ Recent posts