2015-05-21 7 views
0

У меня есть следующий PHP-код, который вызывает скрипт python nmapdb.py, расположенный в той же папке, что и файл php.Выполнение скрипта python из php

function banner($name) { 

$output = exec('python nmapdb.py $name'); 
echo $output; 

} 

питон scipt выглядит следующим образом:

ip=sys.argv[1] 
print("Please get cup of coffee...Coz I am gonna take some time...") 
nm=nmap.PortScanner() 
nm.scan(hosts=ip , arguments='-sV --script=banner') 
result=nm.get_nmap_last_output() 
fo=open("result.xml","w") 
fo.write(result) 
fo.close() 

con = mdb.connect('localhost', 'testuser', 'test623', 'testdb'); 


tree=etree.parse('result.xml') 
root=tree.getroot() 
root.tag 
entries=tree.findall('host') 
i=0 
while i < len(entries): 
    sub=entries[i].find('address') 
    adr=sub.attrib['addr'] 
    adrtype=sub.attrib['addrtype'] 
    sub=entries[i].find('ports') 
    sub1=sub.findall('port') 
    j=0 
    while j < len(sub1): 
     prot=sub1[j].attrib['protocol'] 
     prtid=sub1[j].attrib['portid'] 
     sub2=sub1[j].find('state') 
     stat=sub2.attrib['state'] 
     sub2=sub1[j].find('service') 
     servname=sub2.attrib['name'] 
     try: 
      sub2.attrib['product'] 
     except KeyError: 
      prod='unknown' 
     else: 
      prod=sub2.attrib['product'] 
     try: 
      sub2.attrib['devicetype'] 
     except KeyError: 
      devtype='unknown' 
     else: 
      devtype=sub2.attrib['devicetype'] 
     try: 
      sub2.attrib['ostype'] 
     except KeyError: 
      os='unknown' 
     else: 
      os=sub2.attrib['ostype'] 
     j=j+1 
     comm= "http://api.hostip.info/get_json.php?ip="+adr+"&position=true" 
     response = urllib.urlopen(comm).read() 
     data=json.loads(response) 
     country=data['country_name'] 
     city=data['city'] 


     with con: 

       cur = con.cursor() 
       cur.execute("""INSERT INTO nmap_table (Ip_Addr, Addr_Type, Protocol, Port_Id, State, Service_Name, Product, Device, OS, Country, City) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (adr, adrtype, prot, prtid, stat, servname, prod, devtype, os, country, city)) 
     i=i+1 
print("Kudos....I'm done....Please check the database...") 

Но проблема в том, что, когда я звоню сценарий питона из PHP, он не работает должным образом ... только заявление первой печати приходит в браузере .... в то время как скрипт работает все хорошо, когда выполняются из терминала ... Пожалуйста, помогите ....

+0

[exec] (http://php.net/manual/en/function.exec.php) «Последняя строка из результата команды» использует второй аргумент для вывода вывода – cske

ответ

0

функция баннера ($) {имя

$ выход = EXEC ('питона nmapdb .py $ name ', $ full_output); echo $ output; // Здесь только последняя строка скрипта print_r ($ full_output); // Здесь будет весь консольный вывод сценария python }

+0

Я пробовал ваше решение, но все равно оно не подходит должным образом .... вывод в браузере поступает как «Array» .... спасибо ... –

+0

'echo implode ('', $ full_output) ' – cske

+0

или print_r или var_dump ... – He11ion

Смежные вопросы