試圖找出最好的方法來做到這一點,我得到非常奇怪的結果。長話短說,我們把應用程序配置參數放在後端是python,前端PHP使用了硬編碼參數,我試圖將它綁定到單個python文件,所以我不必更改多個重要的配置參數例如,將其部署到不同的服務器。如何從python文件中使用PHP讀取變量?
蟒蛇文件(defaults.py):
import time
#------------------------------------------------------
#Processing Options
#------------------------------------------------------
perform_tests = False
today = time.time()
#------------------------------------------------------
#MySQL Config
#------------------------------------------------------
host = "somehostname.com"
port = 3526
user = "someuser"
pw = "somepass"
db = "someDB"
bulk = 500
table = "Some_table"
的PHP代碼試圖從它收集配置變量(測試代碼大部分):
<?php
function db_connect() {
$config_file = fopen("../modules/defaults.py", "r");
if ($config_file) {
while (($line = fgets($config_file)) !== false) {
echo "<script>alert(". (string)$line. ");</script>";
// process the line read.
if(substr($line, 0, 4) === "host"){
//$servername = trim(explode("=",$line)[1]);
$servername = "somehostname.com";
}
}
fclose($handle);
}
echo "<script>alert(". $servername. ");</script>";
//$servername = "somehostname.com";
$username = "someuser";
$password = "somepass";
$dbname = "someDB";
$port = 3526;
//Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
?>
正如你可以看到,我正在通過python文件循環,試圖使用文件中的變量重新分配我的硬編碼變量......這裏有很多調試代碼。
因此,當你運行它時,它會提醒你每一行文件...非常奇怪的結果是它沒有提醒整個行(它警告「somehostname.com」,3526,「 someuser「等等,它也沒有提醒輸入時間線或註釋掉的線,這對我來說很奇怪,我希望它能夠以字符串形式讀取行,但是fgets似乎以一種非常奇怪的方式解釋代碼。
我想知道什麼是真正發生在這裏,如果有更好的方法去這個...不修改Python文件,因爲後端使用它無處不在。
感謝。
我建議你考慮將配置移動到一個更標準的文件格式,如ini文件,你可以從兩種語言閱讀和輕鬆解析。 –
PHP應該能夠像文本文件一樣讀取文件,但它只能讀取等號後面的內容,我覺得這很奇怪......我希望它像文本一樣對待,但它將它當作被誤解的代碼來對待。你是對的......但是,這是後端和外部軟件系統處理的巨大變化。我只是想讓它讀取文本,而不是將它解釋爲代碼...... fgets不應該這樣做。 – gunslingor
我在提醒中缺少引號,這就是爲什麼它只給出了等號後的內容......仍然是奇怪的操作。 – gunslingor