php 环境本地用ip连接mysql响应快,用localhost连接慢的解决

 更新时间:2016年11月25日 16:35  点击:1503
今天碰到一个连接mysql的怪问题,我在php 环境本地用ip连接mysql响应快,用localhost连接慢,后来百度了一下整理了一些解决办法,大家一起来看看。

很长时间了,本地php环境,用localhost连接mysql时,只要访问有查询数据库的页面,就会发生响应慢的现象,找了些资料也没解决。

今天突然用ip连接了一下,发下速度竟然快了好多,朋友过来帮看了下。

检查了一下hosts文件,发现127.0.0.1没有解析到localhost,恍然大悟啊。

没有解析过去,响应速度当然慢了,它每次都要自己查找一遍。

第二种就是修改php.ini配置文件里的mysql.default_host,并且把mysql_connect()中的第一个参数写为空字符串;这个方法还没有测试成功过,可能是我把某些地方忽略了吧~~


远程连接MYSQL慢


出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在my.ini(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句,保存。

开始--》运行--》cmd--》net stop mysql --》net start mysql--》哈哈,成功

my.ini所在路径如:D:\Program Files\MySQL\MySQL Server 5.0\my.ini

原来是MySQL的问题呀,这样操作后就不能在MySQL的授权表中使用主机名了而只能用ip。

socket_connect函数在php默认安装是不给支持的,如果要使用它我们需要在php.ini中进行简单的开启,下面我们一起来看看吧。

linux系统中开启socket_connect方法

#cd /home/php/ext/sockets #/server/php/bin/phpize #./configure --prefix=/usr/local/php/lib --with-php-config=/server/php/bin/php-config --enable-sockets #make #make install

再修改/usr/local/php/etc/php.ini文件

#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/" (php5.4版本以上不用加扩展路径) extension=sockets.so

windows系统开启socket_connect步骤

直接修改php.ini 文件 去掉extension=PHP_sockets.dll 前面的分号


最后重启一下你的服务器环境就可以了,如iis apache nginx都可以正常使用socket_connect函数

socket_connect 说明

bool socket_connect ( resource $socket , string $address [, int $port = 0 ] )

成功时返回 TRUE, 或者在失败时返回 FALSE。

例子

 代码如下 复制代码

<?php
$address = gethostbyname ($ip);
        $command = "ping -c 1 " . $address; 
        $r = exec($command); 
          if ($r[0]=="r")
          {       
            $socket = socket_create (AF_INET, SOCK_STREAM, 0);
            if ($socket < 0) {
                echo "socket_create() failed: reason: " . socket_strerror ($socket) . "n";
            } else {
                echo "OK.n";
            }
?>

下面来一个朋友写的php实现redis数据库指定库号迁移,希望例子能给各位带来帮助哦。

redis普通的数据库迁移,只能整个redis save,或者利用主从,当然也可以安装一个redis-dump,不过比较麻烦,这里提供一种php的脚本,实现指定库号的迁移,其实也就是遍历根据存储类型,读出来,插入新库;效果是这样:

 代码如下 复制代码

[root@localhost ~]# php 1.php
1/407
101/407
201/407
301/407
401/407

上代码:

 

 代码如下 复制代码

<?php
$from = '10.0.2.52:6379/7';
$to   = '127.0.0.1:6379/7';
$from_redis = redis_init($from);
$to_redis   = redis_init($to);
$keys  = $from_redis->keys('*');
$count = 0;
$total = count($keys);
foreach($keys as $key){
    if(++$count % 100 == 1){
        echo "$count/$total\n";
    }
    $type = $from_redis->type($key);
    switch($type){
        case Redis::REDIS_STRING:
            $val = $from_redis->get($key);
            $to_redis->set($key, $val);
            break;
        case Redis::REDIS_LIST:
            $list = $from_redis->lRange($key, 0, -1);
            foreach($list as $val){
                $to_redis->rPush($key, $val);
            }
            break;
        case Redis::REDIS_HASH:
            $hash = $from_redis->hGetAll($key);
            $to_redis->hMSet($key, $hash);
            break;
        case Redis::REDIS_ZSET:
            $zset = $from_redis->zRange($key, 0, -1, true);
            foreach($zset as $val=>$score){
                $to_redis->zAdd($key, $score, $val);
            }
            break;
    }
}

function redis_init($conf){
    $redis = new Redis();
    preg_match('/^([^:]+)(:[0-9]+)?\\/(.+)?/', $conf, $ms);
    $host = $ms[1];
    $port = trim($ms[2], ':');
    $db = $ms[3];
    $redis->connect($host, $port);
    $redis->select($db);
    return $redis;
}
 

我们要实现通过php调用sql把数据写入到mysql数据库是非常的简单的我们只要三就步可以实现了,下面来给大家整理php向mysql写入数据的例子。

PHP向MySQL数据库中写入数据有三个步骤:

1,PHP和MySQL建立连接关系

2,打开MySQL数据库

3,接受页面数据,PHP录入到指定的表中

1、2两步可直接使用一个数据库链接文件即可:conn.php

 代码如下 复制代码

<?php
mysql_connect("localhost","root","");//连接MySQL
mysql_select_db("hello");//选择数据库
?>


当然,前提是已经安装WEB服务器、PHP和MySQL,并且建立MySQL表“cnbruce”

mysql_connect()中三个参数分别为MySQL地址、MySQL用户名和MySQL密码

然后就是通过WEB页面传递数据,让PHP通过SQL语句将数据写入MySQL数据库指定的表中,比如新建文件 post.php

 

 代码如下 复制代码

<?php
require_once("conn.php");//引用数据库链接文件

$uname = $_GET['n'];//GET方法为URL参数传递
$psw = $_GET['p'];
$psw=md5($psw);//直接使用MD5加密

$sql = "insert into members(username,password) values ('$uname','$psw')";
mysql_query($sql);//借SQL语句插入数据

mysql_close();//关闭MySQL连接
echo "成功录入数据";
?>

测试页面: http://localhost/post.php?n=cnbruce&p=i0514

即可向MySQL数据库hello的members表中插入新的数据“cnbruce”到username字段、“i0514”到password字段

补充:读取表

读取表中的内容,这里我们用while,可以根据具体情况,用for 或其他的.

 代码如下 复制代码

while($row = mysql_fetch_array($result))
{
echo "<div style="height:24px; line-height:24px; font-weight:bold;">"; //排版代码
echo $row['Topic'] . "<br/>";
echo "</div>"; //排版代码
}

上面是接受的post例子

 代码如下 复制代码

<?php
 $con=mysql_connect("localhost","root","gl");
 mysql_select_db("happysea");

 $name=$_POST['name'];
 $password=$_POST['password'];
 $sex=$_POST['sex'];
 $e_mail=$_POST['e_mail'];
 $question=$_POST['question'];
 $answer=$_POST['answer'];

 $sql="insert into userinfo(name,password,sex,e_mail,question,answer)
  values('$name','$password','$sex','$e_mail','$question','$answer')";
 
 if(!$sql)
 {
  echo('注册失败!');
 }
 else
 {
  echo('注册成功!');
 }

?>

这是数据库。

mysql> describe userinfo;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id             | int(11)         | NO    | PRI | NULL    | auto_increment |
| name       | text              | YES  |        | NULL    |                |
| password | varchar(20) | YES  |        | NULL    |                |
| sex           | char(4)         | YES  |        | NULL   |                |
| e_mail      | varchar(30)  | YES  |        | NULL    |                |
| question   | text               | YES  |        | NULL    |                |
| answer     | text               | YES  |        | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

php导入excel文件入mysql数据库我们是需一借助一个phpexcel类文件了,有了这个类文件我们就可以快速简单的导入excel到mysql数据库中,下面来给大家整理一个例子,希望能对大家有帮助。

导入前我们需要先准备一个数据库,sql语句代码

 代码如下 复制代码


/*
Navicat MySQL Data Transfer

Source Server         : www.111cn.net localhost
Source Server Version : 50133
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50133
File Encoding         : 65001

Date: 2011-10-11 14:11:38
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `execl`
-- ----------------------------
DROP TABLE IF EXISTS `execl`;
CREATE TABLE `execl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of execl
-- ----------------------------
INSERT INTO `execl` VALUES ('14', 'jim');
INSERT INTO `execl` VALUES ('15', 'taurus');


php处理程序,在这里我们需要使用一个phpexcel类文件了,这个可以百度搜索下载。

 代码如下 复制代码

<?php
if($_FILES['execl']['name']){
 $db = mysql_connect('localhost','root','');
  mysql_select_db('test');
  mysql_query('set names gbk');
  require_once 'reader.php';
  $data = new Spreadsheet_Excel_Reader();
  $data->setOutputEncoding('CP936');
  $data->read($_FILES['execl']['name']);
 error_reporting(E_ALL ^ E_NOTICE);
 $sql   = "";
 for($i=1;$i<=$data->sheets[0]['numRows'];$i++)
 {
  if($data->sheets[0]['cells'][$i][1]!=""){
   $sql = "INSERT INTO `execl`(`name`)values('".$data->sheets[0]['cells'][$i][2]."');";
   if(mysql_query($sql)){
    
    echo '成功';
   }else{
    die('失败');
   }
  } 
 }
}
?>
<head>
</head>
<body>
  <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="execl" />
      <input type="submit" value="导入数据" />
  </form>
</body>

[!--infotagslink--]

相关文章

  • vue项目多环境配置(.env)的实现

    最常见的多环境配置,就是开发环境配置,和生产环境配置,本文主要介绍了vue项目多环境配置的实现,感兴趣的可以了解一下...2021-07-20
  • 标准版Eclipse搭建PHP环境的详细步骤

    一、下载Eclipse的PHP插件  百度搜索phpeclipse,看到某条结果是带有SourceForge.net字样的,点进去,找到Download按钮,点击之后,等待5秒就会开始下载了。二、安装Eclipse的PHP插件  插件下载完成之后,解压,然后把site.xml...2015-11-24
  • wamp集成软件搭建php环境

    用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高...2013-09-27
  • mac下Apache + MySql + PHP搭建网站开发环境

    首先为什不自己分别搭建Apache,PHP和MySql的环境呢?这样自己可以了解更多知识,说起来也更酷。可也许因为我懒吧,我是那种“既然有现成的,用就是了”的人。君子生非异也,善假于物也。两千年前的荀子就教导我们,要善于利用工具...2014-06-07
  • VSCode配置C#运行环境的完整步骤

    这篇文章主要给大家介绍了关于VSCode配置C#运行环境的完整步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • js有序数组的连接问题

    1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法 我首先想到的是使用...2013-10-04
  • mysql connect to server at localhost failed错误原因分析

    mysql教程 connect to server at 'localhost' failed错误原因分析 /usr/local/webserver/mysql/bin/mysqladmin: connect to server at 'localhost' failed error: 'A...2016-11-25
  • C#连接Oracle数据库字符串(引入DLL)的方式

    这篇文章主要给大家介绍了关于C#连接Oracle数据库字符串(引入DLL)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • C#连接到sql server2008数据库的实例代码

    这篇文章主要介绍了C#连接到sql server2008数据库的实例代码,需要的朋友可以参考下...2020-06-25
  • A789如何连接无线网络上网

    A789使用过程中,一般有两种途径满足上网的需求,一是通过手机卡上网,一是通过周边存在的无线网络上网。不论上网的速度、还是从需求的费用看,通过无线网络上网都具有绝对的...2016-09-20
  • Ubuntu 系统下安装Android开发环境 Android Studio 1.0 步骤

    Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,可以在Linux,Mac OS X,Window...2016-09-20
  • Nest.js环境变量配置与序列化详解

    这篇文章主要给大家介绍了关于Nest.js环境变量配置与序列化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21
  • VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)

    这篇文章主要介绍了VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h” 或者 检测到 #include 错误。请更新includePath) (POSIX API),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-13
  • Tomcat正常访问localhost报404问题解决

    这篇文章主要介绍了Tomcat正常访问localhost报404问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • MySQL远程连接不上的解决方法

    这篇文章主要为大家详细介绍了MySQL远程连接不上的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-26
  • Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)

    这篇文章主要介绍了Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-12
  • 如何使用VSCode配置Rust开发环境(Rust新手教程)

    这篇文章主要介绍了如何使用VSCode配置Rust开发环境(Rust新手教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-27
  • 如何设置process.env.NODE_ENV生产环境模式

    process.env.NODE_ENV默认只有两种状态即development和production,本文主要介绍了process.env.NODE_ENV设置生产环境模式,感兴趣的可以了解一下...2021-09-14
  • vscode通过Remote SSH远程连接及离线配置的方法

    这篇文章主要介绍了vscode通过Remote SSH远程连接及离线配置的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-16
  • Can't connect to MySQL server on 'localhost' (10048)问题解决方法

    解决Can't connect to MySQL server on 'localhost' (10048), 一般见于使用mysql的windows 2003服务器. 错误的出现的原因: 应用程序需要快速释放和创建新连接, 但是由于 TIME_WAIT 中存在的连接超过默认值,导致较...2013-10-04