天天看點

python+php+變量傳遞,将多個Python變量傳遞給PHP

HTML

這是一個接受使用者輸入(url)的表單:

Go

PHP(Laravel)

此控制器将使用者輸入(url)的值存儲到變量中,以便在python腳本中使用。

$url = Input::get('url');

$name = shell_exec('path/to/python ' . base_path() . '/test.py ' . $url);

return $name;

Python

腳本傳遞使用者輸入的内容并在正斜杠後顯示文本并顯示它。

url = sys.argv[1]

name = url.split('/')[-1]

print(name)

回到PHP,它傳回Python腳本中執行的值。如果使用者輸入url:http://example.com/file.png,它将成功傳回字元串file.png

關于這一切的一切都有效,但我意識到我限制自己,因為shell_exec指令隻會粘貼從python腳本傳回的字元串。如果我想要傳回多個變量,我該怎麼辦?

有問題的Python

url = sys.argv[1]

name = url.split('/')[-1]

test ="pass this text too!"

# ? what goes here ?

是以HTML頁面現在應該傳回file.png和pass this text too!

我是否需要在python中傳回一個數組或json,然後在PHP中提取數組/ json?

注意:我知道這些示例中的安全漏洞/注入,這些是我的實際代碼的精簡版本。

對你提出的問題并不完全是一個答案,但如果這是一個複雜性較小的項目,我建議使用資料庫來處理各個程序之間的通信。如果一台機器都在一台機器上,那麼SQLite的開銷非常小,可以創造奇迹。

@KalZekdor你能詳細說明你的意思嗎? db存儲什麼?

取決于您的特定應用。例如,如果使用者通過php上傳需要由python使用的圖像,而不是将路徑作為python arg傳遞給圖像,則存儲圖像(路徑或資料),上傳者,上傳日期,作業狀态然後,python腳本可以在db中運作未處理的作業并對它們進行操作。

正如我所說,這并不是你所要求的答案,但值得研究(除非這是一個快速的一次性腳本,在這種情況下它有點矯枉過正)。您可以以更健壯的方式建構應用程式。通過指令行參數來回傳遞資料是一種快速而肮髒的解決方案;易于實施,但容易破損,維護噩夢。

您可以傳回一個數組,但要確定元素不包含分隔符。

喜歡print(','.join(name, test))。

或者您可以像json.dumps([name, test])一樣編碼為json,然後在PHP中解析json。 當然,第二個更好。

我投了票,因為我錯過了JSON !! 我每天都在使用它。 對我感到羞恥:D

@HalayemAnis對你感到羞恥:D

在這種情況下,您的Python腳本必須傳回格式化的響應,PHP腳本可以正确解析并使用其值确定變量

例如,你的python代碼必須傳回類似的東西:

file_name=file.png;file_extension=png;creation_date=1/1/2015;

在你的PHP代碼之後,你做了必要的東西

$varValues = explode(";", $PythonResult);

foreach($varValues as $vv) {

$temp = explode("=", $vv);

print 'Parameter : ' . $temp[0] . ' value : ' . $temp[1] . '

';

}