2013-03-01 4 views
3

У меня есть эта настройка php для записи файла конфигурации напрямую, и я хотел бы обновить переменную в файле, а не писать весь файл. Может ли кто-нибудь указать мне в правильном направлении?update config.php с переменными

$allowedExts = array(".jpg", ".jpeg", ".gif", ".png"); 
    $extension = strrchr ($_FILES["logoFile"]['name'], '.'); 

    if (($_FILES["logoFile"]["size"] < 2000000) 
    && in_array($extension, $allowedExts)) 
    { 
if ($_FILES["logoFile"]["error"] > 0) 
{ 
    echo "Return Code: " . $_FILES["logoFile"]["error"] . "<br />"; 
} 
else 
{ 

move_uploaded_file($_FILES["logoFile"]["tmp_name"],"../../upload/logo".$extension); 



$path= "./upload/logo".$extension; 

//update logo settings variable 

$data = file_get_contents('../settings/settings.php'); // grab data 
$data = str_replace("/'LOGO_IMAGE_PATH', '[^']+'/", "'LOGO_IMAGE_PATH', '$path'", $data); // replace that section 
file_put_contents('../settings/settings.php', $data); // save data 


} 
} 
else 
{ 
    echo "Invalid file"; 
} 

Остальные переменные относятся к настройкам saveSettings.

case "saveSettings": 

     //Logo settings 
     $showLogo=$_REQUEST["showLogoOption"]; 
     $roundOption=$_REQUEST["roundOption"]; 
     $siteTitle=$_REQUEST["siteTitle"]; 
     $requireJobTypes=$_REQUEST["requireJobTypes"]; 
     $enableJobTypes=$_REQUEST["useJobTypes"]; 
     $enableMileage=$_REQUEST["enableMileage"]; 
     $allowViewingPayrolls=$_REQUEST["allowViewingPayrolls"]; 
     $trackIP=$_REQUEST["trackIP"]; 
     $enableMobile=$_REQUEST["enableMobile"]; 
     $config="<?php 
      define('USE_LOGO_IMAGE', $showLogo); 
      define('ROUND_TO_QUARTERS', $roundOption); 
      define('SITE_TITLE', '$siteTitle'); 
      define('ENABLE_JOB_TYPES', $enableJobTypes); 
      define('REQUIRE_JOB_TYPES', $requireJobTypes); 
      define('ENABLE_MILEAGE', $enableMileage); 
      define('ALLOW_VIEW_PAYROLLS', $allowViewingPayrolls); 
      define('TRACK_IP', $trackIP); 
      define('MOBILE_VERSION_ENABLED', $enableMobile); 
     ?>"; 
     $fp = fopen("../settings/settings.php", "w"); 
     fwrite($fp, $config); 
     fclose($fp); 
     break;  

Спасибо.

+0

Это может быть возможным дубликатом http://stackoverflow.com/questions/14351407/ rq = 1 – ConcurrentHashMap

+0

Файл уже сделан, и вы просто хотите его обновить один раз во время установки? –

ответ

1

Это функция, которая будет обновлять настройки для вас, это сделает так, чтобы ваш файл settings.php был изменен только один раз во время процесса установки, поэтому он не будет бесполезно открывать файл для каждой настройки. Это спасет их всех одним махом.

function save_settings($settings) // function to update settings to file 
{ 
    $data = file('../settings/settings.php', FILE_SKIP_EMPTY_LINES); // grab current settings file 

    foreach ($data as $key => $line) // loop through lines in file 
    { 
     foreach ($settings as $name => $value) // loop through settings that are being modified 
     { 
      if (strcasecmp('true', $value) && strcasecmp('false', $value) 
      && '0' !== $value && '1' !== $value) 
      { 
       $value = "'" . htmlspecialchars($value, ENT_QUOTES) . "'"; // quote non-boolean, also escape quotes 
      } 

      if (FALSE !== strpos($line, $name)) // if exists update it 
      { 
       $data[$key] = "define('" . $name . "', " . $value . ");\n"; 
      } 
     } 
    } 
    file_put_contents('../settings/settings.php', implode('', $data)); // save it all 
} 

Поместите эту линию в начале нашего процесса установки

// run this line BEFORE you begin to set values in settings.php to initialize the settings array 
$settings = array(); 

Вы измените настройки следующим образом:

// update settings easily by doing the below anywhere you like 
// as long as it is after the above line and before you run save_settings() 
$settings['LOGO_IMAGE_PATH']  = $path; 
$settings['USE_LOGO_IMAGE']   = $_POST['showLogoOption']; 
$settings['ROUND_TO_QUARTERS']  = $_POST['roundOption']; 
$settings['SITE_TITLE']    = $_POST['siteTitle']; 
$settings['ENABLE_JOB_TYPES']  = $_POST['requireJobTypes']; 
$settings['REQUIRE_JOB_TYPES']  = $_POST['useJobTypes']; 
$settings['ENABLE_MILEAGE']   = $_POST['enableMileage']; 
$settings['ALLOW_VIEW_PAYROLLS'] = $_POST['allowViewingPayrolls']; 
$settings['TRACK_IP']    = $_POST['trackIP']; 
$settings['MOBILE_VERSION_ENABLED'] = $_POST['enableMobile']; 

Затем, когда вы все сделали финализации файл настроек по сохраняя его с обновленными настройками:

// run this line at the end to save ALL settings AFTER you are done setting their values 
save_settings($settings); 
+0

Это будет более медленным, чем обычный метод. –

+1

@ dexter4000 после того, как я подумал об этом, было бы невозможно дезинфицировать vars против плохого PHP-кода, поэтому вам нужно просто защитить форму. Я не могу вставить на pastebin, так как это не принесет пользы этому сайту, поскольку код не будет отображаться в поисковых системах, и это делает неудобным для других посетителей его использование. Во всяком случае, я разместил его и прокомментировал это как мог. Кстати, вы должны использовать '$ _POST' вместо' $ _REQUEST' –

+1

@ dexter4000, вы используете ** слова ** 'true' и' false' для вашего логического? Если да, см. Обновление. Btw, пожалуйста, удалите ваши комментарии выше, так что этот пост не загроможден с обсуждением = o) Я удалил мой. –

0

Вы можете сделать что-то вроде этого.

// Передать массив для обновления

function update_config($myConfig) { 
    $myConfig = json_encode($myConfig); 
    $fp = fopen('my_config.ini', 'a'); 
    fwrite($fp, $myConfig); 
    return 'success'; 
} 

// обновление конфигурации, когда вам нужно

$myConfig = array(); 
$myConfig['section_1'] = "a"; 
$myConfig['section_2'] = "b"; 
$myConfig['section_3'] = "c"; 
echo update_config($myConfig) 
Смежные вопросы