Welcome to the BBOGAK

Nice to see you here

LET's GET it Dev. Knowledge

PHP

php - python 연동하기

IT뽀각 2022. 8. 12. 18:11
반응형

PHP안에서 exec 명령어를 통해 불러 올수 있습니다.

python 파일은 755로 권한을 꼭 주셔야합니다.

 

index.php

 
<?php
 
 
 
header('Content-Type: text/html; charset=UTF-8');
 
 
 
//변수에 한글이 포함될 경우 아래 코드를 추가한다.
 
putenv("LANG=ko_KR.UTF-8");
 
setlocale(LC_ALL, 'ko_KR.utf8');
 
 
 
 
 
$변수1 = "AAA";
 
$변수2 = "가나다";
 
$변수3 = "가 나 다"; //공백이 있을경우 문자열로 묶어줘야 함 //exec("python3 python.py ".$변수1." ".$변수2." \"".$변수3."\"", $output);
 
exec("cd /var/www/html/ && python3 python.py ".$변수1." ".$변수2." \"".$변수3."\"", $output);
 
 
 
//이렇게 하는 이유는 경로를 지정해주고 python3를 실행해야 정상적으로 작동.
 
 
 
 
 
//$rt=exec("ls");
 
//echo $rt;
 
 
 
 
 
//print_r($output);
 
echo $output[0]. ""; //Success1 good
 
echo $output[1]. ""; //Success2
 
echo $output[2]. ""; //AAA
 
echo $output[3]. ""; //가나다
 
echo $output[4]. ""; //가 나 다
 
?>

 

python.py

 
# -*- coding: utf-8 -*-
 
import sys
 
 
 
def call(var_1, var_2, var_3):
 
# 무언가를 처리하고..
 
 
 
# print로 값을 return해서 php에서 받을 수 있음
 
print('Success1', 'good')
 
print('Success2')
 
print(var_1)
 
print(var_2)
 
print(var_3)
 
 
 
 
 
 
 
call(sys.argv[1], sys.argv[2], sys.argv[3])

 

PHP와 연동하여 파이썬으로 파일 다운로드, 크롤링 사용시 selinux 를 꺼주셔야합니다.

끄는 방법은 다음과 같습니다.

 

vi /etc/selinux/config#또는vi /etc/sysconfig/selinux

SELINUX=disabled 로 변경 후 저장.

재부팅은 필수입니다.

 

 

--------------------

2번째 방법

--------------------

php에서 외부 프로그램을 실행시킬 일이 없을 것 같았는데 그 일이 생겼다.
그래서 구글링한 결과 간단하게 사용할 수 있는 것을 발견하고 소스를 추가해봤다.

EXEC Function

php manual은 다음을 참고하자 PHP: exec - Manual

exec("python test.py ".$변수." ".$변수 ... n)

실행 명령어 맨 끝에 한 칸을 띄우면서 파라미터를 추가할 수 있다.

받는 쪽에서는 다음과 같이 처리한다.

# -*- coding: utf-8 -*-

import sys
import io

# 한글처리
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')

var1 = sys.argv[1]
var2 = sys.argv[2]

...

n

sys.argv[1] 형식으로 시스템 변수를 받아온다. 인덱스가 1부터 시작한다.


CASE 1

exec("python test.py")

위 소스는 test.php와 test.py가 같은 경로에 있고 로컬(Window, Linux)에서 실행했을 때 사용


CASE 2

exec("cd /home/test/ && python test.py")

위 소스는 linux에서 /home/test/ 라는 경로로 이동한 뒤 && 을 이용하여 이어서 test.py 파일을 실행할 때 사용


CASE 3

exec("C:\Users\User\AppData\Local\Programs\Python\Python35\python.exe C:\APM_Setup\htdocs\test.py")

위 소스는 Window에 APM을 설치하여 실행하는 때 사용

Full Path로 잡지 않으면 python이 실행되지 않음


위 케이스별로 실행해보며 안되는 경우에는 python의 full path를 써보고 파일경로도 full path로 작성해서 사용하길 바람

 

반응형

'PHP' 카테고리의 다른 글

[PHP] 시간표시 함수 data()  (0) 2023.03.24
[MAC] MAC os 에서 PHP 설치하기  (0) 2022.08.20