将 var_dump 保存到文本文件中

36

我有用于执行SQL查询的 PHP 代码

<?
$server = "127.0.0.1";
$username = "root";
$password = "1";

$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>";
        while ($row = mysql_fetch_array($result))
        {
            var_dump ($row); }
     }
    }
    ini_set('max_execution_time', 10);
    return $link;
?>

这段代码会在浏览器上打印出我的数据库名称,我该如何将数据库名称保存到文本文件中?

Connected successfully to >> 127.0.0.1
array(2) { [0]=> string(18) "information_schema" ["Database"]=> string(18) "information_schema" } array(2) { [0]=> string(2) "db" ["Database"]=> string(2) "db" } array(2) { [0]=> string(5) "mysql" ["Database"]=> string(5) "mysql" } array(2) { [0]=> string(10) "phpmyadmin" ["Database"]=> string(10) "phpmyadmin" } array(2) { [0]=> string(4) "test" ["Database"]=> string(4) "test" }


1
如果您要初始化与数据库之间的连接,则必须知道数据库的名称。 - Professor Abronsius
1
请不要使用mysql_数据库扩展,它已经被弃用(在PHP7中永远消失)。特别是如果你正在学习PHP,花费精力学习PDO数据库扩展。从这里开始(http://php.net/manual/en/book.pdo.php),它真的很容易。 - RiggsFolly
如果你看一下 OP 的代码,他正在初始化一个连接到服务器而没有指定模式。他试图列出他可以访问的服务器上的所有数据库。 - user4914655
正如@RiggsFolly所说,学习PDO,然而手册可能会让人有些不知所措,因此你可以参考这个,它非常好,可以让你很快上手。 - Script47
4个回答

61

您可以使用输出缓冲函数来捕获输出并将其写入文件。

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

1
var_dump 旨在供人类调试使用,而不是被程序解析。 - Barmar
1
“serialize($myobj)” 提供的解决方案建议来自 @Matth3w,是一个更好的选择。 - shogitai
5
问题中的代码使用了 var_dump()。问题是关于如何将输出写入文件,而不是文件格式。 - Barmar
2
$str = print_r($row, true); 当为true时,它返回一个字符串,var_dump也是一样的。 - jscripter
1
更好的解决方案是 file_put_contents('var_dump.txt',var_export($array, true)); - Arthur Veselov
显示剩余3条评论

24
不要使用var_dump,而是像这样使用serialize:
<?php
$fp = fopen('vardump.txt', 'w');
fwrite($fp, serialize($myobj));
fclose($fp);
?>

要进行恢复,您可以使用unserialize($filecontents); 通过从文件中读取它。


3
简单而优秀的想法。还有print_r()可以从任何变量创建一个字符串,这可能比序列化数据更容易阅读。 - Alexis Wilke

0
<?
$server = "127.0.0.1";
$username = "root";
$password = "1";

$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>";
while ($row = mysql_fetch_array($result))
{
fwrite($rez, $row['DatabaseName']); }

    }

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

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接