这个用于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中的参数无效
答案 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在非类型语言中没有帮助。