2012-04-13 2 views
1
예를 들어

, 나는 config.php를 가지고 :변수를 PHP 파일에 저장하는 방법을 설정 하시겠습니까?

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

를 그리고 사용자의 편집 변수를 수 있도록 양식을 사용하려면, 모든 것을 그냥 사용하여 데이터베이스와 유사하지만,이 경우의 차이는 그 것이다 PHP 파일을 구현하고 있습니다

따라서 $_POST['name']; $_POST['mail'];을 얻은 후에 변수를 수정하고 해당 PHP에 저장하려면 어떻게해야합니까?

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

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

그것은 해결책이지만, 더 나은 사람이 JSON, XML을 사용하는 또는 것 :

+2

하지 마십시오. 진지하게, 진지하게,하지 마라. 편집 가능한 데이터를 사용하려면 데이터베이스를 사용하거나 정형화 된 형식 (예 : ini, JSON, XML 등)으로 구조화 된 구성 파일을 사용하십시오. 프로그래밍 방식으로 PHP를 편집하는 것은 심각하지 않습니다. – Quentin

+0

이 설정 파일은 기본적으로 설정이있는 텍스트 파일입니까? – Jack

+0

그것은 eg.id, pwd, 서버 이름 등 변수가있는 텍스트 파일입니다. 그게 권한입니다. – user782104

답변

1

일을해야합니까? 당신은 var_export

설정 파일 config.php

를 사용하여 외부 파일로 빠른 구성의 배열을 함께 해킹 할 수
$config = array(
    'name' => 'My Name', 
    'email' => '[email protected]', 
); 

로드/config 파일 저장 : 당신이해야 사용자 입력과 마찬가지로

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

감사 코드를 사용하여 파일을 변경하면 및 $ string = 이 누락됩니다. – user782104

+0

D' oh, 네 말이 맞아. 답변을 업데이트했습니다. 또한 EOF (End Of File)는'?>'와 같은 목적으로''config.php'에서 끝나는'?>'이 필요하지 않습니다. – leepowers

-1

당신은 콘텐츠 자체 같은 빌드 파일을 할 수있는 설정 및 사용자 정의 함수를 작성 file_put_contents를이 기능을 사용할 수 있습니다 데이터 베이스.

+0

** 위험 ** : PHP 코드 삽입 취약점. 이것은'system' 호출을 포함하여 ** 그들이 좋아하는 ** PHP를 실행할 수있는 능력을 사용합니다. – Quentin

+0

또한 실제로 작동하지 않습니다. 문자열은 큰 따옴표로 묶이므로'$ name'과'$ mail'은 문자열에 보간됩니다. – Quentin

+0

당신은 맞습니다, 변수에 대해 나쁘다. 그러나 여전히 이것은 시작시 일부 시스템이 작동하는 방식입니다. 예를 들어 Joomla. –

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

그러면 구성 파일을 문자열로 읽어야합니다. 그런 다음 문자열을 검색하거나 $name 값을 $_POST['name'] 값으로 바꾸려면 정규 표현식을 사용할 수 있습니다.

이 설정 파일이 PHP에 있어야

$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); 
관련 문제