반응형
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 |