2017-07-15 48 views
2

我通過一個HTML表單獲得字符串並將其存儲在PHP變量下使用:其中有空格Python文件PHP通輸入字符串

$var1=$_GET['name'] 

現在我使用過這些字符串到Python腳本

shell_exec("python_file.py $var1") 

假設在PHP中收到的字符串類似於hello world。當變量傳遞給python文件時。 Python認爲它是兩個不同的參數,如:

##python code 
arg=sys.argv 
print arg[0] -> python_file.py 
print arg[1] -> 'hello' 
print arg[2] -> 'world' 

這是什麼解決方法? 我試過把叮叮噹成額外的引號。但它沒有幫助。 我還沒有在python代碼中添加任何split()函數。編輯: 變量是數據庫中的條目。 python腳本打開數據庫,變量定義相應的更改。所以如果Python文件由於空白而將一個變量讀作2。它增加了在數據庫中不正確的列中不正確的項

+0

使用引號:'了shell_exec( 'python_file.py 「$ VAR1」')' - 最後報價是簡單的報價 – Fabien

回答

1

通常你可能需要使用引號:

shell_exec('python_file.py "'.$var1.'"') - 最後的報價是簡單的報價

您還可以使用escapeshellarg()這會充分準備的說法shell,按照我所說的做,甚至更多,甚至引號也可以在參數中正確傳遞。

它是用於從用戶輸入傳遞參數推薦的解決方案,並且將避免災害,如escape-shell vulnerabilities

我的嘗試:

test.py:

import sys 
print(sys.argv) 

exec.php:

<?php $arg = "hello world"; 
print(shell_exec('python3 test.py '.escapeshellarg($arg))); ?> 

在我的外殼:

$ PHP5 exec.php

[ 'test.py', '世界你好']

+0

由於小煜,但這種方法並沒有工作。 – john

+0

你嘗試過逃跑嗎? – Fabien

+0

是的,我也是那樣 – john

1

我找到了一種方法用空格來解決辦法。我在PHP中使用了字符串連接。 如果Python被括在引號中,它不會基於空格拆分參數。

這正是我所做的:

$var=$_GET["var"]; 
$var="'".$var."'";