Вызов скрипта на python из php с передачей произвольных данных
 
		
			Редко, но бывает необходимо из скрипта на PHP, вызвать на исполнение скрипт на python с передачей неких параметров и данных.
Мне например понадобилось потому что основной код у меня на PHP, а вот часть которая отвечает за взаимодействие с онлайн кассой Атол — на python, и переписывать эту часть на PHP нет возможности (без большого гемороя) — заголовки драйвера Атола под Linux есть только на python (dto9fptr.py и dto9base.py — поставляются в комплекте с драйвером).
Ниже приведен один из способов:
PHP:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php $idkkm= _POST("idkkm"); $sql = "SELECT * FROM online_kkm where id='$idkkm'"; $result = $sqlcn->ExecuteSQL($sql) or die("Не могу выбрать список настроек!" . mysqli_error($sqlcn->idsqlconnection)); $param=array(); $param["mode"]="getinfo"; while ($row = mysqli_fetch_array($result)) {     $param["ipaddress"] = $row['ipaddress'];     $param["ipport"] = $row['ipport'];     $param["model"] = $row['model'];     $param["accesspass"] = $row['accesspass'];     $param["userpass"] = $row['userpass'];     $param["protocol"] = $row['protocol'];     $param["logfilename"] = $row['logfilename'];     $param["testmode"] = $row['testmode'];     $param["libpath"] = $row['libpath'];     $param["version"] = $row['version'];     $ppath= $row['ppath']; }; $jsonparam= base64_encode(json_encode($param)); $command = "/usr/bin/env python $ppath $jsonparam 2>&1"; $pid = popen( $command,"r"); while( !feof( $pid ) ) {  echo fread($pid, 256);  flush();  ob_flush();  usleep(100000); } pclose($pid); ?> | 
Python:
| 1 2 3 4 5 6 7 | #!/usr/bin/env python2 #encoding: UTF-8 import sys, json,base64 prm=json.loads(base64.b64decode(sys.argv[1])) print prm["ipaddress"] | 
Т.е. что мы сделали?
- В скрипте на PHP сформировали json строку с параметрами и закодировали её в base64
- Вызвали python скрипт с аргументом в кодированной строки
- Python скрипт соответственно обратно декодирует и обрабатывает json
Профит.
 krana-ot-2018-04-03-16-02-01.png»>
krana-ot-2018-04-03-16-02-01.png»></p>
<p><a href=) krana-ot-2018-04-03-16-06-02.png»>
krana-ot-2018-04-03-16-06-02.png»> krana-ot-2018-04-03-16-11-40.png»>
krana-ot-2018-04-03-16-11-40.png»>
