将var_dump保存到文本文件中的多服务器ip的文本文件中

时间:2016-08-13 00:46:41

标签: php mysql sql var-dump

这个用于sql查询的php代码, 如果我有多个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.file-put-contents]:无法打开流:第24行的C:\ AppServ \ www \ connectdb.php中的参数无效

2 个答案:

答案 0 :(得分:1)

也许更精确的东西,比如import React, { Component } from 'react'; import { Provider } from 'react-redux'; import { store } from '../reducers/index'; import { Router, Route, browserHistory } from 'react-router' import { syncHistoryWithStore } from 'react-router-redux' import { fetchCurrentUserIfNeeded } from '../actions/auth'; // Main SCSS that imports the others. import '../css/app.scss'; // Containers import Home from './Home'; const history = syncHistoryWithStore(browserHistory, store); export default class App extends Component { constructor(props) { super(props); this.state = { appInitialized: false }; } componentWillMount(){ store.dispatch(fetchCurrentUserIfNeeded()); // TODO: I think this may not be performant. // http://redux.js.org/docs/api/Store.html#subscribe store.subscribe(() => { if (store.getState().auth.initialCheckComplete) { this.setState({ appInitialized: true }); } }); } render() { console.log('render'); return ( <Provider store={store}> <Router history={history}> <Route path="/" component={Home} /> </Router> </Provider> ); } } 会起作用,它有一种存储输出的模式

print_r

答案 1 :(得分: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。

-Note- end output buffering这就是为什么我们需要在循环的每次迭代中重新启动它ob_start()

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在非类型语言中没有帮助。