#php #python-2.7 #shell #exec
#php #python-2.7 #оболочка #exec
Вопрос:
Я пытаюсь выполнить этот файл python ниже, когда post-запрос отправляется на веб-сервер apache. Я включил скриншоты, которые показывают путь и все остальное, что может быть полезно, например, разрешения (/usr /bin / python amp; executable). Оба файла php и py находятся в папке var/www/html/ . Заранее благодарю вас за любой запрос. Я изменил exec(‘load.py ‘), в exec(‘/usr/bin/python load.py ‘) безрезультатно.
load.py
#!/usr/bin/python
import re
import paramiko
f = open('blocked.txt', 'r')
f = str(f.read())
#print(f)
s = f.find('epip="')
e = f.find(' epname="')
string = str(f[s:e])
string = re.findall(r'"([^"]*)"', string)
string = string[0]
print(string)
hostname = 'xxx'
username = 'xxx'
password = 'xxx'
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=hostname, username=username, password=password)
stdin,stdout,stderr=ssh_client.exec_command('config firewall address n ' 'edit ' string 'n' 'set subnet ' string '/32 n ' 'end n' 'config firewall addrgrp n ' 'edit BlockedIPs n ' 'append member ' string 'n ' 'end n')
test = stdout.readlines()
print(string ' has been added to the BlockedIPs group')
blocked.php
<html>
<body>
<?php
$file = 'blocked.txt';
$arr = $_POST;
$fp = fopen($file, 'w') or die('Can not open!');
foreach ($arr as $key => $value) {
$toFile = "$value";
fwrite($fp, $toFile) or die('could not write to file');
}
fclose($fp);
$command = escapeshellcmd('load.py');
$output = shell_exec($command);
echo $output;?>
<br>
</body>
</html>
Комментарии:
1. Есть ли сообщение об ошибке?
exec
принимает в качестве 2-го аргумента выходную переменную, а 3-ю — переменную кода возврата, вы проверили это?2. Поскольку сообщение поступает с устройства, я не уверен, как просмотреть ошибку. Если get, я бы открыл консоль Chrome, но для запроса post не уверен, куда идти, чтобы найти какую-либо информацию об ошибке. Я вижу, что создается текстовый файл, который сообщает мне, что первая часть файла php работает, когда он получает сообщение. Если я запускаю код python из cli без sudo, он работает.
3. Хм, интересно, мне нужно перезапустить apache?
4. Вы можете добавить отладочную информацию в скрипт и ОПУБЛИКОВАТЬ ее. (Вы можете отправить свой собственный POST-запрос, используя curl или используя что-то вроде «Postman»).