2012-04-13 62 views
1

例如,我有一個config.php文件:如何設置將變量保存在PHP文件中?

//default config 
$name = 'default name'; 
$mail = 'default mail'; 

而且我想用一個表格讓用戶編輯變量,一切就像使用數據庫,但在這種情況下,不同的是它在PHP文件上實現

因此,我得到$_POST['name']; $_POST['mail'];後,如何修改該變量並將其保存在該PHP中?

+2

不要。嚴重的是,不要。如果您想使用可編輯數據,請使用數據庫或使用格式合理的結構化配置文件(如ini,JSON,XML等)。試圖以編程方式編輯PHP是非常重要的。 – Quentin 2012-04-13 08:03:48

+0

這個配置文件基本上只是一個帶有設置的文本文件嗎? – Jack 2012-04-13 08:04:53

+0

它只是一個帶有變量eg.id,pwd,服務器名稱等的文本文件...這就是權利。 – user782104 2012-04-13 08:07:21

回答

1

配置文件需要在PHP?您可以快速配置陣列黑客一起到使用var_export

配置文件config.php

外部文件
$config = array(
    'name' => 'My Name', 
    'email' => '[email protected]', 
); 

加載/保存配置文件:

include 'config.php'; // Bring config into the current namespace 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Update on POST 
$config['name'] = $_POST['name']; 
$config['email'] = $_POST['email']; 
file_put_contents('config.php', sprintf("<?php\n%s\n", var_export($config, true))); 
} 
print_r($config); 

與任何用戶輸入你應該請務必過濾白名單中的輸入以清除危險數據。例如,preg_replace('/\W/', '', $_POST['name'])將從用戶提供的值中刪除不安全的數據(非單詞字符)。

+0

它會錯過和$字符串= 後我使用您提供的代碼感謝您更改文件。 – user782104 2012-04-13 21:30:05

+0

D'oh,你說得對。我已經更新了答案。另外請注意,'config.php'中不需要結尾'?>',因爲EOF(文件結束)的作用與'?>'相同, – leepowers 2012-04-13 23:51:01

-1

您可以使用file_put_contents函數寫入文件的配置和自定義函數來構建內容本身是這樣的:

function generateConfig(){ 
    return "//default config" 
    . '$name' . " ='{$_POST['name']}';" 
    . '$mail' . " ='{$_POST['mail']}';"; 
} 

file_put_contents("file.config", generateConfig()); 

這是一個解決方案,但更好的辦法是使用JSON,XML或數據庫。

+0

**危險**:PHP代碼注入漏洞。這使得用戶能夠執行他們喜歡的任何** PHP,包括'system'調用。 – Quentin 2012-04-13 08:11:46

+0

此外,它實際上不會工作。由於字符串被雙引號括起來,'$ name'和'$ mail'將被插入到字符串中。 – Quentin 2012-04-13 08:13:36

+0

你是對的,我的變數不好。但是,這仍然是一些系統在啓動時的工作方式。例如Joomla。 – 2012-04-13 08:17:22

1
$config = file_get_contents('config.php'); 

應該將配置文件讀入字符串。然後,您可以搜索字符串或使用正則表達式來替換值和$_POST['name']值。

這應該工作

$name = $_POST['name']; 
$mail = $_POST['mail']; 
$config = file_get_contents('config.php'); 
$pos = strpos($config, '$name'); 
$config = substr_replace($config, '$name = \'' . $name . '\'', $pos, strpos($config, ';', $pos) - $pos); 
$pos = strpos($config, '$mail'); 
$config = substr_replace($config, '$mail = \'' . $mail . '\'', $pos, strpos($config, ';', $pos) - $pos); 
file_put_contents('config.php', $config); 
相關問題