phpmyadmin3.x版在windows下的新版本php里日期显示乱码的补丁方案

> 这个问题应该在php5.5.30 与 7.3.11中不再出现。或许,这是灵异问题。 
因为近年一直使用在apache里以fast-cgi模式开以一个php5.3运行phpmyadmin;
前几天偶然发现这个问题并不存在了,或许以前真的只是灵异现象。

现象:

一直使用的phpmyadmin3.5版本(RELEASE-DATE-3.5.0,一个做了配置优化的版本 phpMyAdmin_3.5_path8.net),这个版本比较简洁,更新的pma有些臃肿。然而,在windows下使用php5.5, 及php7.0,都发现日期显示成乱码

phpmyadmin_35_date_string_bad

方案:

文件 libraries/common.lib.php , 行1648行

        $format = __('%B %d, %Y at %I:%M %p');

改成

        $format = '%Y-%m-%d %H:%M:%S';

即可,日期格式显示格式示例 2016-01-27 11:49:07

phpmyadmin_35_date_string_fixed

原因:

PMA_localisedDate函数使用了strftime()函数,该strftime函数第一个参数为日期格式,phpmyadmin源程序使用了带中文的格式字符串;而在windows下的php版本,在做格式化时会转成乱码。经确认linux下没有这个问题,pma是正常的。

更好的方案

$format = __('%B %d, %Y at %I:%M %p');
//patch for win
$fs_ver=explode('.',PHP_VERSION);
if( $fs_ver[0] > 5 or ($fs_ver[0] = 5 && $fs_ver[1] >= 4) ){
    if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
        $format = '%Y-%m-%d %H:%M:%S';
    }
}

亦即:github. 这样可以更好的兼容性。

 

简单命令对mysql数据库的备份与还原

使用phpMyAdmin备份mysql数据库

备份mysql的最简单方法是的使用phpMyAdmin的“导出”功能,导出成sql文件,不用管其它选项,只管导出就可以,这就是mysql标准的备份文件。

导出时,一般不要勾选压缩选项。因为如果备份文件大到一定程度,就会因为php分配不到足够内存而死掉;经验是50M以上的表,就不要压缩了。这是个蛋疼的事情:小文件不值得压缩,大了反而压缩不动。所以不压缩就是了。

还原mysql数据库

要还原mysql数据库时,使用phpMyAdmin是个简单的方法,但更容易因为备份文件过大而超过php内存限制而死掉,这时你会有种痛不欲生的感觉。

推荐使用命令行连接mysql,以source命令导入还原,这个导入过程是件愉悦的事情。

不幸的是如果你在windows下,会比较啰嗦:

把你的mysql备份文件放到一个比较浅的目录里,比如放在 E:\120507.sql ,你要还原的数据库叫mydata

找到你的mysql安装在哪里,假如你的mysql安装在D:\Program Files\MySQL\MySQL Server 5.0 ,那么你的mysql命令行客户端将位于D:\Program Files\MySQL\MySQL Server 5.0\bin ,按着按下面的步骤来:

  • 1. 开始-运行,输入cmd,确定,你将进入命令行界面
  • 2. 输入 d: 然后回车,进入D盘
  • 3. 输入cd "D:\Program Files\MySQL\MySQL Server 5.0\bin" 再回车(注意,如果路径中有空格,那引号是必须的)
  • 4. 输入mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384 回车(假设你的mysql的root用户密码是123456, 注意,这里u与p后面带不带空格都可以,我习惯不带; 你只需改这行命令里的密码部分,其它不需要改变,照用即可)
  • 你将看到

    注意到光标闪烁处的mysql> ,这就说明已经成功连接到本机的mysql数据库。
  • 输入use mydata 回车 ,进入mydata数据库
  • 输入source E:\120507.sql 回车,你将看到一行行快速滚动的信息。滚动完毕就导入完成了。
  • 输入exit驾车即可。回到phpmyadmin里看导入的结果吧.

核心回顾

mysql备份,使用phpMyAdmin,导出需要的表,或整个数据库,注意最好不要勾选压缩

还原,使用命令行客户端连上mysql服务器,mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384,然后use mydata进入需要还原的数据库,运行source x:\bakup_file.sql 导入备份。

phpmyadmin删除“追踪”(就是在表名旁的眼睛图标)/phpmyadmin(v3.3+)追踪功能简介

数据库phpmyadmin里的表pma_tracking,打开,里面即是追踪项的配置记录,删掉就可以了。

使用新版本的phpmyadmin,试用里面的追踪功能,不过用过后不知道怎么删掉了。于是google到这里,网上有人问同样问题,但没人回答。于是只好做罢,自己动手,丰衣足食。

猜想这是否是phpmyadmin本身的功能,而非mysql的;因为之前google这个问题时,搜索mysql trace并没有发现说mysql有这样的追踪功能。

于是查找phpmyadmin库,见表pma_tracking打开,删除记录,问题解决。

 

附:phpmyadmin官方中文文档的“追踪”功能简介:

$cfg['Servers'][$i]['tracking'] 字符串
自 3.3.x 起可以使用追踪功能。它可以帮你追踪每个通过 phpMyAdmin 执行的 SQL 命令。它支持记录数据修改和数据定义语句。启用后还可以创建数据表的版本。

创建版本会造成两个影响:

  • phpMyAdmin 保存当前数据表的快照,包括结构和索引。
  • phpMyAdmin 针对当前数据表记录的所有修改结构和/或数据的命令都将与版本关联。

当然你也能查看追踪到的修改。在"追踪"页里每个版本都会有一份完整的报告。你可以在报告中搜索,如你可以只列出一段时间内的语句。若想根据用户名搜索可以输入 * 表示任意用户或者输入 ',' 分隔的用户列表。你还可以导出 (包括搜索结果) 报告为文件或者临时数据库。

要启用此功能:

  • 设置好 pmadb 和 phpMyAdmin 高级功能
  • put the table name in $cfg['Servers'][$i]['tracking'] (e.g. 'pma_tracking')
$cfg['Servers'][$i]['tracking_version_auto_create'] 布尔
设置追踪系统是否自动为数据表和视图创建版本。默认为 false 。

若设为 true 然后你通过

  • CREATE TABLE ...
  • CREATE VIEW ...

创建了一张表或视图并且它当前没有任何版本,系统将会自动为你创建一个版本。

phpMyAdmin配置:操作栏只显示“浏览,结构,编辑”等图标不显示文字

phpMyAdmin的强大便捷作用这里就不赘述。下载了phpMyAdmin 3.4.2,最新版本,界面有很大改变,比之前的花哨很多,包括大量的ajax应用。但它默认把操作一栏下的操作图标旁加入了文字,浪费屏幕宽度,使用其自带的config/配置一下,可以只显示图标,具体位置在

自定义主框架 -标签 -

$cfg['PropertiesIconic'] = true;

作相应修改,即可。

MySQL/phpmyadmin问题解决手记:#2002 - 服务器没有响应 (或者本地 MySQL 服务器的套接字没有正确配置)

在fedora 12下使用自己从源代码编译的mysql使用,安装过程很麻烦,但好在运行正常。

之前使用windows下mysql/phpmyadmin,到linux下,当然也少不了,整个phpmyadmin,包括配置文件都是从windows下直接拷贝来的,但连接数据库总是出错:

#2002 - 服务器没有响应 (或者本地 MySQL 服务器的套接字没有正确配置)

连接远程数据库,就是虚拟主机数据库服务器却是没有问题的。使用linux终端连接

mysql -h127.0.0.1 -uroot -p

也没有任何问题。

而ping localhost,返回也是正常的,说明linux知道localhost就是本机的。

[root@localhost www]# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.077 ms
^C
--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2697ms
rtt min/avg/max/mdev = 0.062/0.071/0.077/0.011 ms

感觉很怪异,google一下,有这样的解决方案:

要将 config.inc.php 中
$cfg['Servers'][$i]['host'] = ’localhost’;
改成 $cfg['Servers'][$i]['host'] = '127.0.0.1';
还要添加
$cfg['Servers'][$i]['hide_db'] = 'information_schema';//使用登陆后看不见information_schema数据库

于是把配置文件里的host改成127.0.0.1,再连接,好了,连接正常。($cfg['Servers'][$i]['hide_db'] = 'information_schema';这一句加不加都无所谓,不影响连接数据库)

为什么在linux下localhost就是不能连接呢?查mysql官方文档[参看这里],看到有这样的句话:

如果未指定指定主机名或指定了特殊的主机名localhost,将使用Unix套接字。

Unix套接字默认为/tmp/mysql.sock,而本机并没有配置这样的套接字文件,所以自然是连接失败了。

官方文档确实非常重要,比网上的一般的解决方法都更权威有效得多。

phpmyadmin报错原因及解决方法:无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。

两天前登录phpmyadmin突然出错了,

"无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。"

很奇怪前些天一直好好的,怎么就突然不能用了,把phpmyadmin文件拷到另外站点的目录里,运行,居然好了。但原来的目录就是不行。

用过后,就把另外站点里的phpmyadmin删掉了,原来目录里还是坏的,有时间再找原因解决。

今天,又要使用修改一些东西,原来目录里的还是坏的,重新从官方下载最新的3.3.1版上传,还是坏的;传到另外目录里也一样。看来这个问题总是要解决的了。

google了一下,有人说是“打开您的php.ini配置文件session.save_path = “某个路径”检查该项是否配置正确”,大致明白了,估计是phpmyadmin需要写session文件,但session目录没有相应权限所以报错“...发生错误时创建会话...”,错误信息里说明是session相关的,只是这个错误信息太简略了,不容易轻易看明白。

到服务器上修改php.ini,以前没有配置session.save_path的。于是C盘建一个session目录c:\tempfolder\phpsession,给phpmyadmin站点的web用户赋读写权限,在php.ini里加上一条

session.save_path="c:\tempfolder\phpsession"

运行iisreset,进入 phpmyadmin站点,终于看到了久违的登录页面了。

分析一下原因,应该是这样的:

windows版的php应该默认使用系统临时文件目录,可能因为别的什么原因,之前有对临时文件目录的权限丢失了,所以就报上面错误

前几天拷到别的站点目录里,而这个站点的iis用户对windows临时文件有读写权限,所以可以正常使用phpmyadmin;今天,那个站点的iis用户也没权限了,就不行了。

至于网上有人说的,要赋everyone读写权限(甚至还有说赋“完全控制”的权限),就没必要了,只给相应的iis用户赋读写权限就可以;否则还是完全隐患。

顺便说一点,我的phpmyadmin没有放到自己电脑上,远程连接mysql服务器,而是直接把phpmyadmin放到mysql服务器上,这样正是为了安全其见。mysql的root用户只允许localhost连接,不允许从别的主机上连接。其它用户也是只允许在相应主机上访问。