试图找出最好的方法来做到这一点,我得到非常奇怪的结果。长话短说,我们把应用程序配置参数放在后端是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