2016-08-13 2 views
0

этот код php для sql-запроса, , если у меня есть несколько sql-сегментов в текстовом файле, и я хочу получить серверы из этого файла. как я могу сохранить var_dump для каждого разрывать в "serverip.txt"сохранить var_dump в текстовый файл для многосерверного ip из текстового файла

<? 

$list =file('servers.txt'); 
$username = "root"; 
$password = "1"; 
foreach($list as $server) 
$link= connecttodb($server,$username,$password); 
function connecttodb($server,$username,$password) 
{ 

$rez=fopen("test.txt","ab"); 
    if ($link=mysql_connect ("$server","$username","$password",TRUE)) 
    { 
    fwrite($rez,"".$server." \r\n"); 
    echo "Connected successfully to >> " .$server ; 

     $result = mysql_query('SHOW DATABASES'); 
echo "<br>"; 

ob_flush(); 
ob_start(); 
while ($row = mysql_fetch_assoc($result)) { 
    var_dump($row); 
    file_put_contents("$server.txt", ob_get_flush()); 
} 


    } 

} 
ini_set('max_execution_time', 10); 
return $link; 
    ?> 

У меня есть эта ошибка

Предупреждение: file_put_contents (ServerIP .txt) [function.file-Пут-содержание]: не удалось открыть поток: недопустимый аргумент в C: \ AppServ \ WWW \ connectdb.php на линии 24

+0

Не делайте этого. Используйте формат * фактического * кодирования, например [JSON] (http://php.net/manual/en/function.json-encode.php). – Sammitch

+0

Не надо. Используйте фактический формат кодировки, такой как JSON. ??? как ?? –

+0

попробуйте 'ob_start()', а затем 'ob_get_clean();' – ArtisticPhoenix

ответ

1

Возможно, что-то более точным, как print_r будет работать, где она имеет режим для хранения выходного

while ($row = mysql_fetch_assoc($result)) { 
    file_put_contents("$server.txt", print_r($row, true)); 
} 
0

Я думаю, что вместо

ob_get_flush() 

Вы хотите

$var = ob_get_clean(); 
file_put_contents("$server.txt", $var); 

Выражаясь все Снегурочка вам нужно будет сделать это

while ($row = mysql_fetch_assoc($result)) { 
    ob_start(); 
    var_dump($row); 
    file_put_contents("$server.txt",ob_get_clean()); 
} 

http://php.net/manual/en/function.ob-get-clean.php

Получить текущее содержимое буфера и удалить текущий выходной буфер ... Возвращает содержимое буфера вывода и завершения выходного буферирования. Если буферизация вывода не активна, возвращается FALSE.

end output buffering -УКАЗАНИЕ- поэтому мы должны перезапустить его ob_start() на каждой итерации цикла.

Для ob_get_flush()

Выходной буфер должен быть запущен ob_start() с флагом PHP_OUTPUT_HANDLER_FLUSHABLE. В противном случае ob_get_flush() не будет работы.

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

function getVarType($var, $escapeHtml = true){ 
    $strArg = 'unknown'; 
    switch (gettype($var)){ 
     case 'boolean': 
      return ($var ? 'true' : 'false'); 
     case 'integer': 
      return intval($var); 
     case 'double': 
      return floatval($var); 
     case 'string': 
      if($escapeHtml){ 
       $var = htmlentities($var, ENT_NOQUOTES, 'UTF-8', false); 
      } 

      return "'".$var."'"; 
     case 'resource': 
      return 'Resource id #'.intval($var); 
     case 'NULL': 
      return 'NULL'; 
     case 'array': 
      return "Array"; 
     case 'object': 
      return 'Object('.get_class($var).')'; 
     case 'unknown type': 
     default: 
      return'UNKNOWN TYPE'; 
    } 
} 

$row = array_map('getVarType', $row); 

Однако я думаю, что в PHP 7 они полностью параметры для отображения массива. Это из класса обработки исключений/ошибок, который я только что написал, вы можете изменить его, чтобы более точно сопоставить var_dump, если хотите. В настоящее время он настроен на соответствие распечатке трассировки стека исключений.

Кстати, если вы хотите действительно убийца класс debuggin, вы можете использовать один из моих рамок

https://github.com/ArtisticPhoenix/Evo/blob/master/EVO/Debug.php

С некоторой небольшой модификацией может соответствовать вашим потребностям (возможно, немного избыточно)

Это то, что он выводит

$G = ['one'=>1, 'two' => 2, 3=>['foo', 'bar']]; 
EVO_Debug::dump($G); 

==================================== EVO_DEBUG::DUMP ===================================== 
Output from FILE[ C:\UniServerZ\www\Evo\EVO\bootstrap.php ] on LINE[ 72 ] 
------------------------------------------------------------------------------------------ 
array(3){ 
    ["one"] => int(1), 
    ["two"] => int(2), 
    [3] => array(2){ 
      [0] => string(3) "foo", 
      [1] => string(3) "bar", 
    }, 
} 
========================================================================================== 

Хотя вы хотите использовать

EVO_Debug::export($G); 

Он также может выдавать частные свойства и константы классов. Я только размещаю ссылку, потому что это не тривиально иметь дело со всеми возможными типами переменных, и здесь здесь не помогает PHP, который не является типизированным.

+0

хорошо пункт Fred. Также я не думаю, что это лучший способ сохранить данные. – ArtisticPhoenix

+0

Я хотел бы что-то сделать сам, но TBH, я кустарник. В это время ночи у меня голова. –

+0

У меня есть эта аналогичная идея, но ее настройка для вывода обрезанной трассировки стека исключений. В основном у меня есть несколько вызовов в моей Framework, которые всегда одинаковы, поэтому я хочу удалить их из stacktrace, но класс исключений 'getTraceAsString' является окончательным, поэтому его не перегружать. Поэтому я обрезаю его, а затем создаю свою собственную трассировку стека строк из версии обычного массива. В принципе, это способ получить stacktrace для отладки, аналогичный выпуску классов исключений. – ArtisticPhoenix

Смежные вопросы