2016-10-25 11 views
1

誰もが、こんにちは!PHP .iniファイルへの書き込み例外

私は現在、PHPから.iniファイルへの書き込みをしようとしている、と私はここからテオーマンSoygulの答えとコードを使用しています:これは、大きなうまくいくhttps://stackoverflow.com/a/5695202

<?php 
function write_php_ini($array, $file) 
{ 
    $res = array(); 
    foreach($array as $key => $val) 
    { 
     if(is_array($val)) 
     { 
      $res[] = "[$key]"; 
      foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"'); 
     } 
     else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"'); 
    } 
    safefilerewrite($file, implode("\r\n", $res)); 
} 

function safefilerewrite($fileName, $dataToSave) 
{ if ($fp = fopen($fileName, 'w')) 
    { 
     $startTime = microtime(TRUE); 
     do 
     {   $canWrite = flock($fp, LOCK_EX); 
      // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load 
      if(!$canWrite) usleep(round(rand(0, 100)*1000)); 
     } while ((!$canWrite)and((microtime(TRUE)-$startTime) < 5)); 

     //file was locked so now we can store information 
     if ($canWrite) 
     {   fwrite($fp, $dataToSave); 
      flock($fp, LOCK_UN); 
     } 
     fclose($fp); 
    } 

} 
    ?> 

、が、私は保存するときそれのそれまでのデータは一部が私の.iniで奇妙なまで示しています。私が持っているとき、変数にだと思わ

[Server] 
p_ip = "192.168.10.100" 
p_port = 80 

、引用符を入れているようです。なぜ私は分からない。

誰かが私を正しい方向に向けることができれば、本当に感謝します。ありがとうございました!

答えて

0

これは文字列かどうかにかかわらず引用符を削除しました。

function write_ini_file($array, $file) 
{ 
    $res = array(); 
    foreach($array as $key => $val) 
    { 
     if(is_array($val)) 
     { 
      $res[] = "[$key]"; 
      foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : $sval); 
     } 
     else $res[] = "$key = ".(is_numeric($val) ? $val : $val); 
    } 
    safefilerewrite($file, implode("\r\n", $res)); 
} 
1

あなたがそこにそれらを置くためにPHPを告げたので、あなたが引用符を取得:

else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"'); 
            ^^^^ 

IPアドレスは "数字" ではありません - 彼らは文字列です:

php > var_dump(is_numeric('192.168.10.100')); 
bool(false) 

マルチ "ドット" の文字列数字ではありません。 .は1つだけです:

php > var_dump(is_numeric('192.168')); 
bool(true) 
php > var_dump(is_numeric('192.168.10')); 
bool(false) 
関連する問題