Docker에서 실행되는 레거시 PHP(5.3) 애플리케이션 가져오기
9053 단어 legacycodephpmysqldocker
레거시 애플리케이션은 오래되고 오래된 버전의 PHP가 작동해야 하는 앱입니다.
PHP의 공식 이미지는 Docker 허브https://hub.docker.com/_/php/에서 사용할 수 있습니다.
거기에서 사용 가능한 가장 오래된 이미지를 사용합니다.
php:5.3.29-apache
다음을 사용하여 이미지를 바로 다운로드할 수 있습니다.
$ docker pull php:5.3.29-apache
예를 들어 이전 PHP 버전에서만 작동하는 작은 PHP 코드 스니펫을 제공합니다.
index.php
:<?php
$conn = mysql_connect("localhost", "user", "saxud3sldnb");
mysql_select_db( "application_db");
mysql_close($conn);
mysql_connect
는 최신 PHP 버전Docker 구성 및 설정을 추적하려면
docker-compose.yml
를 생성합니다.그러면
docker-compose.yml
를 저장소에 커밋하고 환경을 설정하는 데 필요한 단계를 추적할 수 있기 때문입니다.다음 파일은 시작 버전입니다.
docker-compose.yml
:version: '3.7'
services:
legacy-php:
image: php:5.3.29-apache
volumes:
- .:/var/www/html
그런 다음 실행해 보십시오.
$ docker-compose run -T legacy-php php /var/www/html/index.php
Creating example-legacy-php-app_legacy-php_run ... done
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /var/www/html/index.php on line 2
Warning: mysql_select_db(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /var/www/html/index.php on line 3
Warning: mysql_select_db(): A link to the server could not be established in /var/www/html/index.php on line 3
Warning: mysql_close() expects parameter 1 to be resource, boolean given in /var/www/html/index.php on line 4
MySQL 서버가 아직 설정 및 연결되지 않았기 때문에 몇 가지 오류가 있습니다.
다음 단계입니다.
MySQL Docker 이미지는 여기에서 사용할 수 있습니다.
https://hub.docker.com/r/mysql/mysql-server/
이 가이드에서는 버전
5.7.37
을 사용하고 있습니다.$ docker pull mysql/mysql-server:5.7.37
docker-compose.yml 파일에 이미지를 추가해 보겠습니다.
docker-compose.yml
:version: '3.7'
services:
mysql:
image: mysql/mysql-server:5.7.37
environment:
MYSQL_DATABASE: application_db
MYSQL_USER: user
MYSQL_PASSWORD: saxud3sldnb
restart: always
legacy-php:
depends_on:
- mysql
image: php:5.3.29-apache
volumes:
- .:/var/www/html
PHP 예제 스크립트에는 약간의 변경이 필요합니다.
"localhost"대신 호스트 이름 "mysql"을 사용하십시오.
index.php
:<?php
$conn = mysql_connect("mysql", "user", "saxud3sldnb"); <1>
mysql_select_db( "application_db");
mysql_close($conn);
위와 동일한 명령줄로 이것을 실행하고 빈 출력을 얻습니다.
스크립트는 아직 많은 작업을 수행하지 않습니다.
$ docker-compose run -T legacy-php php /var/www/html/index.php
Creating example-legacy-php-app_legacy-php_run ... done
$
따라서 기존 사용자에 대해 데이터베이스를 쿼리할 수 있습니다.
index.php
:<?php
$conn = mysql_connect("mysql", "user", "saxud3sldnb"); <1>
mysql_select_db( "application_db");
$result = mysql_query("SELECT * FROM `users`");
if (!$result) {
echo "Error: " . mysql_error();
} else {
while ($row = mysql_fetch_assoc($result)) {
foreach($row as $key => $value) {
echo $key.": ".$value.", ";
}
}
}
mysql_close($conn);
이 예제를 실행하면 데이터베이스가 비어 있고 테이블을 찾을 수 없기 때문에 오류 메시지가 나타납니다.
$ docker-compose run -T legacy-php php /var/www/html/index.php
Creating example-legacy-php-app_legacy-php_run ... done
Error: Table 'application_db.users' doesn't exist%
$
간단한 예를 들어 데이터베이스를 초기화해 보겠습니다.
코드를 작동시키십시오.
init.sql
:CREATE TABLE `users`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL DEFAULT '',
`password` varchar(40) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
);
INSERT INTO `users`(`name`,`password`) VALUES ('admin', MD5('passw0rd'));
위의 SQL 스크립트는 md5로 인코딩된 암호를 사용하여 초기 테이블과 관리 사용자를 만듭니다.
순수한 md5를 사용하는 것은 암호에 대한 잘못된 알고리즘이며 여기서는 예제용으로만 사용됩니다.
MySQL 도커 이미지에는 데이터베이스를 초기화하는 스크립트가 있습니다. 올바른 위치에
init.sql
를 추가하겠습니다.docker-compose.yml
:version: '3.7'
services:
mysql:
image: mysql/mysql-server:5.7.37
environment:
MYSQL_DATABASE: application_db
MYSQL_USER: user
MYSQL_PASSWORD: saxud3sldnb
restart: always
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
legacy-php:
depends_on:
- mysql
image: php:5.3.29-apache
volumes:
- .:/var/www/html
ports:
- "8002:80"
웹브라우저에서 http://localhost:8002에 있는 응용 프로그램입니다.
새 초기화 스크립트를 실행하려면 MySQL 컨테이너를 다시 시작하십시오.
그런 다음 예제를 다시 실행합니다.
$ docker-compose stop
Stopping example-legacy-php-app_mysql_1 ... done
$ docker-compose run -T legacy-php php /var/www/html/index.php
Creating example-legacy-php-app_legacy-php_run ... done
id: 1, name: admin, password: bed128365216c019988915ed3add75fb%
$
그리고 이것으로 기사를 마칩니다.
수행된 작업:
이 기사는 내가 작성한 작은 전자책에서 추출되어 PDF로 무료로 출판되었습니다: https://php5to8.tk
즐기세요😸
Reference
이 문제에 관하여(Docker에서 실행되는 레거시 PHP(5.3) 애플리케이션 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/oracle2025/get-a-legacy-php-53-application-running-in-docker-1cb2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)