解决phpMyAdmin不允许空密码登陆配置方法
我们先打开phpmyadmin中的config.inc.php,如果根目录没有config.inc.php我们找到librariesconfig.default.php这个文件,因为版本不同可能文件路径不一样。
2)打开你找到的配置文件,将其中的:
代码如下 | 复制代码 |
$cfg['Servers'][$i]['AllowNoPassword'] = false; 改为:
|
好了这样我们就可以使用空密码登录了,当然如果你mysql本身就设置有登录密码这个还是需要输入密码了,那么我们就可以设置mysql的用户密码为空了,这样就可以实现真正的空密码登录了,当然服务器上不推荐空密码登录哦。
PHP框架现在是一种很流行的东西了,很多朋友开发应用与网站都会选择一个PHP框架或模板了,下面我们来看看PHP框架是如何实现的吧。本文主要来聊聊框架理论,但不针对任何一款框架,不过任何一款框架都离不开这个理论,首先我们了解下框架的来龙去脉,任何技术的出现都是为了解决某个问题,之前的博客有讲过smarty,其存在就是为了html和php更好地分离开来。而所谓的“框架”是一种为了统一书写格式,访问方式而进行的自我约束行为,其实按照这个说法我们每个人基本上都或多或少的使用过自己定义的框架,比如说在没使用框架之前自己开发一个项目,有时候是一天无法完成的,我们为了防止混乱,为了更好地记忆我们会进行目录规划和程序的规划,潜意识的把程序分类,放到不同的文件夹,于是框架应运而生了,又比如说我们曾经做了一个CMS系统,如果我们又接手一个类似的项目,你会重复书写代码吗,答案肯定不会,但如果是别人的项目你拿来改其实是一件很蛋疼的事情的,因为你根本不知道他的这个CMS的规则是什么,即使是自己的项目时间久了如果自己没有固定的规范的话也是很容易忘记的,那么怎么样才能保证自己每次写的代码都可以按照一定的规范呢,把每个项目要用的东西挑出来,目录结构挑出来,以后无论什么项目都在这个基础上书写,那么属于自己的框架就出来了。
但框架单纯这样是不完善的,那么框架应该有哪些能力呢,与其这样说我们不妨想想我们平时一定会写的代码一定会做的事情是什么呢,首先解决的是什么呢,为了减少路径问题,目录结构的安排其实很重要,有时候文件包含 再进行文件的移动总是一件很蛋疼的事情,最好的办法是什么呢,绝对路径,但同时存在了一个类似E:www 这样的问题,但这个值我们可以通过预定义变量$_SERVER["DOCUMENT_ROOT"]获得,我们可以将其定义为常量,define("ROOT_PATH", $_SERVER["DOCUMENT_ROOT"]);include ROOT_PATH . "/lib/mysql.php";类似这样的文件夹怎么移动都不会有事的,那么就出现了一个固定的写法,为了解决路径问题而存在的写法,几乎每一页都会用到,还有模板的输出,数据库的连接,那么我们可以把这些代码封装起来,或者分离出来,每一页包含即可,被分离的这些部分其实就是一个小框架,为什么这么说呢,如果我们包含它们进来,例如smarty模板,肯定是实例化好的对象,那个量名已经固定,可能是$smarty 如果我们包含了这么个文件进来,这个量就不能再次进行赋值使用,这样下面部分的代码就无法进行使用了,由于包含的类,如数据类 上传类 图像类 分页类 位置已经写死在这个公共文件里,为了不改代码 这个目录就成了必须存在的了,目录格式固定,编写代码方式的约束,这就形成了框架。
多年来的程序员的总结交流及开发经验,大家总结了一些优秀的编写方式,最经典的是单点入口,什么是单点入口呢,之前我们总结了一些几乎每个程序都要用到的功能,这里依然存在一些问题,例如 在公共文件包含之前我们还是不知道根目录是多少,如果我们在每一个文件夹下面都放一个公共文件存在代码重复问题,哪天修改的话需要全部修改,需要找到需要多少个这样的文件,现在是多个程序包含一个程序,然后用户访问n个程序来完成各个功能,于是程序员就想可不可以反过来我用一个程序包含这些不同功能的程序,用户只访问这个程序就可以了呢,于是单点入口模式出现了,在网站首页的 index.php 写上每个程序都要用的部份 然后跟据某个量,比如一个 get 量来判断当前实际要执行的程序是哪一个,由 index.php 把它包含进来运行,这种由一个程序。完成所有功能的方式,称为 单点入口, 于是由这个入口程序和它对应的各个目录结构成为了一个框架。
出于安全在包含文件的时候往往都会固定目录,不然就容易出漏洞 所以,往往会在路径头尾加个限制。例如
代码如下 | 复制代码 |
<?PHP include "./app/" . $_GET['url'] . ".php"; ?> |
那路径就只能写成类似这样index.php?url=news/list,实际包含的是 /app/news/list.php 当然了,实际的情况,还要检查一下这个程序文件是否存在之类的。
完整一点的话。我们可以这样写这个入口文件。
代码如下 | 复制代码 |
<?php //这里写绝对路径 //这里写数据库连接 //这里写模板初始化,配置 //这里判断连接变量 //这里包含文件进来运行 //这里输出模板 //这里关闭数据库 |
一个面向过程的单点入口框架就完成了, 是不是有觉得每次都在地址栏带一个 get 不方便? 那我们可以换一个写法,例如 tp 框架最喜欢用的 http://localhost/index.php/news/list后面的 /news/list 由程序转成 php 路径包含进来就可以了。在 Apache 环境中,这个 /news/list 可以由服务器变量的 PATH_INFO 取得,如果没有的话。也可以用 REQUEST_URI 取得接近的 ,IIS 下面,有 HTTP_X_REWRITE_URL 可以取得这个值 ,自从单点入口模式出现之后,而且oop开发模式从php5开始大行其道,各种oop设计的框架让我们眼花缭乱,但是万变不离其宗,依然是什么入口方式,路径结构是什么样的,文件名的命名规则,用什么样的访问方式,可以运行哪个程序。用oop开发的框架,不外乎就是把主程序改写成为了一个类,
例如:
//包含共用文件,实例化各个类啥的
页面->初始化();
//把用户发来的网址转成要包含的路径
页面->处理网扯();
//在这里包含程序运行
页面->运行()
//输出模板
页面->输出()
各种各样的框架只是为我们准备了一个规矩罢了。。在我们的开发累计的过程中,我们常常会把一些常用的类封装成类,例如,数据库类,文件上传类,图片处理类,邮件收发类,远程访问类,各种接口类……这个时候,我们就会希望框架能给我们提供一个好一点调用类的方法, 也就是所谓的“扩展性” ,比如 TP 框架的 Db 类 。如果不用其自带的类库只用它们的核心框架,其实几个文件就够了。
TP 框架支持三种访问格式。
/news/list
/index.php/news/list
/index.php?m=news&a=list
第一种需要服务器的 urlrewrite 支持,后面两种可以直接用,
事实上,Zend 框架也差不多 文件的包含方式是。以类的形式包含,执行的其实是:/文件夹/对象/方法,这种做法有优势。因为在同一个功能中,相似的代码很多,封装到同一个类里面,可以更高效的重复使用代码 ,
比如这样
代码如下 | 复制代码 |
class NewsAction { public function index() { public function show() { |
还可以利用构造函数等,使每一个功能,在刚进来的时候就都做了同一件事情。以上就是简单框架的理论。
制作应用原理
index.php 主入口文件
代码如下 | 复制代码 |
<?php define('ISEXIST',true); require "init.php"; $control = new Controller(); $control -> Run(); ?> |
---------------------------------------------------------------------------------------------
init.php 文件
代码如下 | 复制代码 |
<?php if(!defined('ISEXIST')) exit("请从入口文件运行程序"); header("Content-Type:text/html;charset=utf-8"); if(!defined('ROOT_PATH')) //这里动态的声明,''是转义反斜线,默认''为转义字符 define('ROOT_PATH',str_replace('','/',dirname(__FILE__))); require ROOT_PATH.'/a/config.php'; require ROOT_PATH.'/a/controller.class.php'; require ROOT_PATH.'/a/view.class.php'; require ROOT_PATH.'/a/model.class.php'; ?> |
----------------------------------------------------------------------------------------------
config.php 文件
代码如下 | 复制代码 |
<?php if(!defined('ISEXIST')) exit("请从入口文件运行程序"); $C = array( 'URL_MODE'=>1,//url模式,1为普通模式,2为path_info模式 'DEFAULT'=>'welcome',//默认的控制器 'DEFAULT_ACTION'=>'index'//默认的方法 ); ?> |
-----------------------------------------------------------------------------------------------
controller.class.php 文件
代码如下 | 复制代码 |
<?php class Controller { public function Run() { $this->Analysis(); //开始解析URL获得请求的控制器和方法 $control = $_GET['con']; $action = $_GET['act']; $action = ucfirst($action); //这里构造出控制器文件的路径 $controlFile = ROOT_PATH . '/Controllers/' . $control . '.class.php'; if(!file_exists($controlFile)) //如果文件不存在提示错误, 否则引入 { exit("{$control}.class.php控制器不存在<br>". "请检查: ".$controlFile."是否存在<br>"); } include($controlFile); $class = ucfirst($control); //将控制器名称中的每个单词首字母大写,来当作控制器的类名 if(!class_exists($class)) //判断类是否存在, 如果不存在提示错误 { exit("{$control}.class.php中未定义的控制器类" . $class); } $instance = new $class(); //否则创建实例 if(!method_exists($instance, $action)) //判断实例$instance中是否存在$action方法, 不存在则提示错误 { exit("$class类中不存在方法:". $action); } $instance->$action(); } protected function Analysis() { //$GLOBALS['C']['URL_MODE']; global $C; //包含全局配置数组, 这个数组是在Config.ph文件中定义的,global声明$C是调用外部的 if($C['URL_MODE'] == 1) //如果URL模式为1 那么就在GET中获取控制器, 也就是说url地址是这种的 [url=http://localhost/index.php?c]http://localhost /index.php?c[/url]=控制器&a=方法 { $control = !empty($_GET['con']) ? trim($_GET['con']) : ''; $action = !empty($_GET['act']) ? trim($_GET['act']) : ''; } else if($C['URL_MODE'] == 2) //如果为2 那么就是使用PATH_INFO模式, 也就是url地址是这样的 [url=http://localhost/index.php/]http://localhost/index.php/[/url]控制器/方法 /其他参数 { if(isset($_SERVER['PATH_INFO'])) { //$_SERVER['PATH_INFO']URL地址中文件名后的路径信息, 不好理解, 来看看例子 //比如你现在的URL是 [url=http://www.php100.com/index.php]http://www.php100.com/index.php[/url] 那么你的$_SERVER['PATH_INFO']就是空的 //但是如果URL是 [url=http://www.php100.com/index.php/abc/123]http://www.php100.com/index.php/abc/123[/url] //现在的$_SERVER['PATH_INFO']的值将会是 index.php文件名称后的内容 /abc/123/ $path = trim($_SERVER['PATH_INFO'], '/'); $paths = explode('/', $path); $control = array_shift($paths); $action = array_shift($paths); } } //这里判断控制器的值是否为空, 如果是空的使用默认的 $_GET['con'] = !empty($control) ? $control : $C['DEFAULT']; //和上面一样 $_GET['act'] = !empty($action) ? $action : $C['DEFAULT_ACTION']; } } ?> |
--------------------------------------------------------------------------------------------------
welcome.class.php 文件
代码如下 | 复制代码 |
<?php class Welcome { function Index() { echo '欢迎使用此CMS系统'; } function Run() { echo 'Hello'; } function Show() { echo '方法名show'; } } ?> |
csv文件格式
代码如下 | 复制代码 |
$exportdata = '规则111,有效期'."\n"; |
csv文件在php输出需要使用header告诉浏览器格式
代码如下 | 复制代码 |
header("Content-type:application/vnd.ms-excel"); |
例子
代码如下 | 复制代码 |
$exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."\n"; |
下面再整理了一个php+mysql导入csv数据的例子
代码如下 | 复制代码 |
<?php |
在php中合并数组我们可以使用array_merge函数
array array_merge (array array1 array2…,arrayN)
例子
代码如下 | 复制代码 |
//团购1 $abpccount = count( $tugou ); //echo $abpccount; $page->tpl->assign('tugou',$tugou); |
注意事项
array_merge()合并时我们必须要注意一点的是中间的值必须为数组否则合并之后会返回空哦,这个我们经验哦。
xdebug是一款常用来调试php程序的一个性能的工具,下面本文章介绍在lnmp系统安装配置xdebug与最后简单调试方法,还有在调试过程碰到一些问题解决办法。xdebug 安装步骤
xdebug是php的一个module,需要编译安装,我用lnmp安装的php,php被默认安装到/usr/local/php,然后做一个硬链接到/usr/bin
先编译xdebug
代码如下 | 复制代码 |
wget http://www.xdebug.org/files/xdebug-2.2.3.tgz tar xzf xdebug-2.2.3.tgz cd xdebug-2.2.3 /usr/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config |
修改php.ini配置
把下面这些加入
代码如下 | 复制代码 |
;no-debug-non-zts-20090626 这个文件夹名称和php版本是一一对应的 xdebug.dump_once = On |
利用Xdebug使调试信息更加美观
Xdebug扩展加载后,Xdebug会对原有的某些PHP函数进行覆写,以便好更好地进行Debug.比如var_dump()函数,
知道通常需要在函数前后加上”<pre>…</pre>”才能够让输出的变量信息比较美观、可读性好.
但是加载了Xdebug后,不再需要这样做了,Xdebug不但自动给加上了<pre>标签,还给变量加上颜色.
例:
代码如下 | 复制代码 |
<?php $arrTest=array( "test"=>"abc", "test2"=>"abc2" ); var_dump($arrTest); ?> |
利用Xdebug测试脚本执行时间
xdebug_time_index()来显示时间
代码如下 | 复制代码 |
echo xdebug_time_index(); |
测定脚本占用的内存
想知道程序执行到某个特定阶段时到底占用了多大内存,为此PHP提供了函数memory_get_usage().
这个函数只有当PHP编译时使用了--enable-memory-limit参数时才有效.
Xdebug同样提供了一个函数xdebug_memory_usage()来实现这样的功能,
另外xdebug还提供了一个xdebug_peak_memory_usage()函数来查看内存占用的峰值.
代码如下 | 复制代码 |
echo "<br>"; |
检测代码中的不足
有时候代码没有明显的编写错误,没有显示任何错误信息(如error、warning、notice等),但是这不表明代码就是正确无误的.
有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效率,没有办法直接看出来是哪部份代码出了问题.
这时候希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析,找到问题所在.
之前编辑php.ini文件
加入
代码如下 | 复制代码 |
[Xdebug] xdebug.profiler_enable=on xdebug.trace_output_dir="I:Projectsxdebug" xdebug.profiler_output_dir="I:Projectsxdebug" |
这几行,目的就在于把执行情况的分析文件写入到”I:Projectsxdebug”目录中去(可以替换成任何想设定的目录).
如果执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如cachegrind.out.1169585776这种格式命名的文件.
这些就是Xdebug生成的分析文件.用编辑器打开可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,需要用图形化的软件来查看.
在Windows平台下,可以用WinCacheGrind(下载地址http://sourceforge.net/projects/wincachegrind/)这个软件来打开这些文件.
可以直观漂亮地显示其中内容:
代码如下 | 复制代码 |
testXdebug(); function requireFile() { |
很直观地看到index.php中调用了一个函数testXdebug(),testXdebug()中又调用了requireFile()函数.这样就可以非常方便地查看整个脚本的程序结构.
重启php-fpm,随便写段错误的php代码,刷新浏览器,就能看到错误提示
在使用过程碰到一个小插曲
A:访问超慢响应
B:访问超快响应但是是空白页。
问题A解决的方法很多,总归还有解决办法;问题B我估计是线程问题,也许可以通过调试php.ini的配置搞定,也许不是,很难讲清楚,线程的问题可能要跟xdebug的版本扯上关系。
解决方式
PHP.ini 找到memory_limit参数,增大!
换一个浏览器!我之前一直用Google Chrome调试程序,之后就开始变慢下来,直到每个页面变成6秒才加载完毕,已经忍无可忍。换成了Firefox、IE均没有这个问题。 (这个方法很好用,还能立刻见效!)
使用 xdebug.profiler_enable_trigger配置,有选择的运行xdebug功能探查程序。
xdebug.remote_host 的值最好跟你服务器的IP一致,比方说你是通过localhost访问,则这里写localhost,你是127.0.0.1访问,就写127.0.0.1
看看你的xdebug.profiler_output_dir目录是否已经达到几G了?(一套电商程序很可能在持续开发十几个小时后,xdebug.profiler_output_dir目录的xdebug文件达到好几G!)
平时不需要的时候,最好关闭xdebug!
代码如下 | 复制代码 |
xdebug.remote_enable = 0 |
相关文章
- phpmyadmin config.inc.php配置示例...2013-09-29
- phpmyadmin是一款很不错的WEB对mysql数据库管理软件,如果你想创建数据库与设置用户权限我们必须操作用户的很高的权限,如ROOT权限,下面我来给大家介绍介绍。 先来配...2016-11-25
- 多个网站共用一个Mysql数据库时,为使数据库管理不混乱,一般采用不同的网站使用不同前缀名的方式进行区分。而如何批量修改已有数据库的前缀名呢?全部导出修改后再导入?还是一个表一个表的修改?今天我要介绍的是相对简单的...2015-10-21
- 出现phpmyadmin不能登录是我在修改我mysql服务器密码之后导致的,后来百度了相关的原因,原来是修改了mysql密码之后我们还需要在phpmyadmin目录中去修改config.inc.php中...2016-11-25
- 昨天有一朋友说自己的phpmyadmin不能登录并且无任何提示了,问我怎么解决,下面我来分享一下关于phpmyadmin不能登录问题总结. phpmyadmin不能登录没有提示 解决方法:...2016-11-25
- phpmyadmin还有高级功能可能大部份站长不知道吧,今天本文章就来给大家介绍phpMyAdmin 高级功能设置的方法图解,希望文章对大家会有所帮助。 phpMyAdmin 安装后,默认...2016-11-25
PHP在Linux下连接MSSQLServer的配置方法简述(一、Sybase库)
如果需要在Linux下访问Microsoft SQL Server或Sybase数据库,则推荐下列软件包。 SybaseCommon http://download.sybase.com/pub/ase1192_linux/sybase-common-11.9....2016-11-25- 修改httpd.conf 找到 <Dirctory "/var/www/html"> 在这个Dirctory容器内添加: 代码如下 复制代码 SetEnvIfNoCase Referer "^http://www.111cn.net/"...2016-01-28
- 下面我们一起来看看一篇关于phpmyadmin写入一句话木马的测试教程,希望此教程能够对各位有帮助。 方法一,一句话木马偶尔拿到一个config中,发现是root,且还有phpmyadmi...2016-11-25
- 首先,主要是ecmall使用的phpmailer版本太低,不支持加密连接。然后,得对相应代码做一定调整。1. 覆盖phpmailer请从附件进行下载: 复制代码 代码如下:http://cywl.jb51.net:81/201405/yuanma/ecmall_phpmailer_lib(jb51.n...2014-05-31
- 今天在使用西部数码空间时发现里面有很多定义好的伪静态规则了,下面我来给大家介绍一下在后面主机面板中配置使用伪静态功能吧,希望文章对各位会带来帮助。...2016-10-10
phpmyadmin无法登录提示please check errors given in your PHP
下面来给各位同学介绍关于phpmyadmin无法登录提示please check errors given in your PHP and/or webserver,希望例子对各位有帮助。 今天帮别人弄网站的时候要...2016-11-25- 由于在php开发时很多函数命令都只记得一个部份,如果要全写还得百度,后来听说有一个PHPStorm可实现自动补全,我就下载了一个并安装配置了,下面给各位朋友介绍。 为...2016-11-25
IIS 环境下配置PHP5+MySql+PHPMyAdmin
虽然主要是做.net开发的,但是,时不时的还要搞一下php,但是,php在windows下的配置,总是走很多弯路,正好前几天又配置了一下,因此总结在这里,做为自己的备忘,也希望给遇到问题的朋友们提供一些帮助。...2016-01-27- phpmyadmin无法登陆无响应一般是session或cookie设置问题了,下文小编也是因为cookie与 session目录设置问题导致phpmyadmin不能正常登录了。 之前由于修改php.ini...2016-11-25
- 下面总结一些在开发中碰到的phpmyadmin不能登录解决方法,有需要的朋友可参考参考。 错误 MySQL 返回: #1045 - Access denied for user 'root'@'localhost' (using...2016-11-25
mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败。 查看目前配置:复制代码 代码如下:show VARIABLES like '%max_allowed_packet%';显示...2014-05-31- 打开httpd.conf文件用文本编辑器打开后,查找 代码如下 复制代码 Options FollowSymLinks AllowOverride None 改为: Options FollowSymLinks AllowOv...2016-01-28
- SQLite数据库安装好之后我们只要在php.ini中把 ;extension=php_pdo_sqlite.dll 前面的;取消掉就可以了,下面我来给大家简单的介绍一下吧。 SQLite数据库的配置 ...2016-11-25
- 1、首先确定Apache是否加载了Mod_rewrite 模块 方法: 检查 httpd.conf 中是否存在以下两段代码 (具体路径可能会有所不同,但形式基本是一样的): (一)LoadModule rewrite_modu...2016-01-28