此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是非类型化语言在这里也没有帮助。