将var_dump从文本文件保存为多服务器IP的文本文件


save var_dump into text file for multi server ip from text file

此PHP代码用于SQL查询,如果我有多个sql服务器到文本文件,我想从这个文件得到服务器。如何将每个服务器的var_dump保存到"serverip.txt"

<?
$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. txt]。在C:'AppServ'www'connectdb.php第24行

也许更精确的东西,比如print_r会工作,它有一个存储输出的模式

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

我想与其

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()

For ob_get_flush()

输出缓冲区必须由ob_start()启动PHP_OUTPUT_HANDLER_FLUSHABLE国旗。否则ob_get_flush()不会工作。

也就是说,它可能不是实现您的目标的最佳方法。作为一种替代方法,您可以使用以下函数

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如果你想。当前,它被设置为匹配异常堆栈跟踪输出。

顺便说一下,如果你想要一个真正的杀手级调试类,你可以使用我的框架中的 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是非类型化语言在这里也没有帮助。