首页 > 编程技术 > php

phpmyadmin无法登录提示please check errors given in your PHP

发布时间:2016-11-25 17:37

下面来给各位同学介绍关于phpmyadmin无法登录提示please check errors given in your PHP and/or webserver,希望例子对各位有帮助。


今天帮别人弄网站的时候要修改数据库字段

然后发现苦逼的事情

phpmyadmin无法登陆

访问 PHPMyAdmin 提示

phpMyAdmin - Error

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.

好吧 无语了

赶紧查资料

说这个问题是因为session存放目录的权限问题。session目录你要找到PHP目录下的php.ini文件,看你设定的  session 存放目录为哪个路径,找到其所在的文件夹,给予Internet来宾账户session目录的控制权限。

我是按照以下操作解决的:

在php.ini找到session.save_path 这一行, session.save_path = "D:/php/tmp"  那么你就对tmp文件夹进行权限设定。 Internet来宾账户就是IUSR开头的账户,我给了其最高为写入权限,刷新可以看到登陆界面了。激动哈,所以记录下方法,以免遗忘。

另外一个是将php.ini中的session.auto_start的值改为1(启动),默认是0(禁用).

然后重启下

fopen一般情况是可以使用的,但是今天在测试一个打开远程文件时出了一些问题,最后还是解决了,而感谢而发写了这篇文章了,也就是总结了一下我找到的解决办法吧,希望对同样和我碰到fopen函数使用问题的朋友带来帮助,让大家也少走弯路了。

问题描述

allow_url_fopen = on


Whether to allow the treatment of URLs
(like http:// or ftp://) as files.
allow_url_include = on


Whether to allow include/require to open URLs
(like http:// or ftp://) as files.

在本地wamp测试环境中,这样设置以后,fopen可以正常打开远程地址,但遇到本地的地址却会报错,例如

 

 代码如下 复制代码
fopen("http://localhost/myfile.php", "r");

就会在超过php.ini中设置的脚本最长执行时间后报错,告知文件不存在等。这在在线服务器上是不会出现的,但如果将localhost替换成127.0.0.1,却可以正常工作。

从状况看,问题出在DNS解析上,按理说localhost已经自动被映射到127.0.0.1,实际上访问http://localhost和访问http://127.0.0.1也到达同一个地址。

解决的方法就是检查一下Windows的host文件,通常位于system32目录下,一个系统盘是C盘的host路径如下所示

C:/Windows/System32/drivers/etc/hosts

打开hosts文件,用记事本或者notepad++等工具

将下面的127.0.0.1前面的#去掉即可。

 代码如下 复制代码
# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost

将url视为文件有什么用

比如给include的文件传值,可以这样

 代码如下 复制代码

<?php include 'http://yourdomain.com/
example.inc.php?foo=1&bar=2'; ?>
在example.inc.php中


<?php
    var_dump($_GET['foo']);
    var_dump($_GET['bar']);
?>

运行结果

string(1) "1" string(1) "2"

补充一下

fopen不能创建中文文件名文件的问题

之前网页的chartset用的是utf-8,文件也用utf-8,然后用fopen()创建一个中文文件名的文件时问题就出来了,文件名都是乱 码!

查看了很多文档试了不少方法都解决不了,本来想着用别的方法绕过这个问题,忽然脑子里闪过Windows默认的文字编码是ansi,然后再 baidu了一下,证实了这点,所以我的网页也应该是ansi编码才能使创建的文件名不会是乱码。

接着就着手验证,把网页都用ansi保存,去掉chartset语句,果然ok了,但是网页的内容就成乱码了,后来想起,这个网页还include 了别的网页,把include的网页也改成ansi保存,哈哈万事ok

编程这个工作真的很靠积累,如果我以前没看过Windows默认编码是ansi,那这个问题就不知何年何月才能解决了

ps:< meta content ="text/html; charset=utf-8" http -equiv ="Content-type" > 这个meta标记一定要放在<title></title>之前才有效的

后来又想到了一个更好的解决方法,网页还是用utf-8编码和保存,只是fopen()里的文件名参 数单独给它编下码就行,php有iconv() 这个改换编码的程序,把utf-8转成 gb2312就可以避免中文文件名为乱码了

test.htm

 代码如下 复制代码

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>标题:{title}</title>
</head>
<body>
<b>此新闻的内容:</b>{content}
</body>
</html>

 test.php

 

 代码如下 复制代码

<?php

    //实际应用中很可能是查询数据库取内容。
    $rows = array(array("替换标题1","替换内容1"),array("替换标题2","替换内容2"));
    $filename = "tmp.htm";
    foreach($rows as $id => $val){
        $title = $val[0];
        $content = $val[1];
        $pagename = "测试".$id.".html";
        //对文件名的编码,避免中文文件名乱码
        $pagename = iconv("UTF-8", "GBK", $pagename);
       
        //读取模板
        $tmpfile = fopen($filename,"r");
        $string = fread($tmpfile,filesize($filename));
        $string = str_replace("{title}",$title,$string);
        $string = str_replace("{content}",$content,$string);
        fclose($tmpfile);
        //写新文件
        $newpage = fopen($pagename,"w");
        fwrite($newpage,$string);
        fclose($newpage);
       
    }
    echo "创建成功!";
?>

对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注意细节。

先看phpcms中的一个函数

 代码如下 复制代码

phpcms/libs/classes/param.class.php
/**
     * Set Cookie
     * @param string $var
     * @param string $value
     * @param int $time
     * @param string $path
*/

    public static function set_cookie($var, $value = '', $time = 0, $path = '') {
        $time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);
        $s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;
        $var = pc_base::load_config('system','cookie_pre').$var;
        $path = $path == '' ? pc_base::load_config('system','cookie_path') : $path;
        $_COOKIE[$var] = $value;
        if (is_array($value)) {
            foreach($value as $k=>$v) {
                setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);
            }
        } else {
            setcookie($var, sys_auth($value, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);
        }
    }
param::set_cookie('auth', '',time()-1,'/');

这个函数与cookie没什么区别我们先不介绍它,可能很多朋友懂,下面我们再看

setcookie函数的第四个参数为cookie路径,关于路径的设置,本文做了一些尝试,下面是两个测试页(直接用url表示路径和文件目录了):

  http://localhost/test/cookie/father.php

  http://localhost/test/cookie/child/child.php

 

 代码如下 复制代码

<?php
//location:  locahost/test/cookie/father.php

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
setcookie("father_set_1_/","@@@@",time()+24*3600,"/");
setcookie("father_set_2_/child","@@@@",time()+24*3600,"/child/");
setcookie("father_set_3_test/cookie/child","@@@@",time()+24*3600,"/test/cookie/child/");

print_r($_COOKIE);
?>

 

 代码如下 复制代码

<?php
//location:   localhost/test/cookie/child/child.php

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
setcookie("child_set_0","@@@@",time()+24*3600);
setcookie("child_set_1_/","@@@@",time()+24*3600,"/");
setcookie("child_set_2_/child","@@@@",time()+24*3600,"/child");
setcookie("child_set_3_/test/cookie/child/","@@@@",time()+24*3600,"/test/cookie/child/");

print_r($_COOKIE);
?>

分别按如下顺序访问页面father.php—>child.php—>father.php—>child.php,使用firebug查看,分别有如下结果:


php 设置cookie路径例子总结

 第一访问father.php

  图中可以看出,本次请求服务端做出响应,打印了$_COOKIE数组,但数组为空。设置了三个cookie值,分别是:"father_set_1_/"、"father_set_2_/child"、"father_set_3_test/cookie/child",它们对应的路径为"/"、"/child"、"/test/cookie/child",其中"/"指的是站点根目录。
  第一次请求father.php时,初始状态下客户端没有相关的cookie记录,在上图中只有已收到的cookie,没有已发送的cookie,则打印$_COOKIE数组时是没有输出。
  从上面这点可以看出,页面的每次请求cookie的变化是:页面请求时浏览器发送客户端已有的cookie,服务器端接收cookie将其存入数组$_COOKIE数组中供程序使用;而在服务器端响应本次请求设置的cookie尚未发送到客户端时$_COOKIE数组中是没有记录的。
 
php 设置cookie路径例子总结
第一次访问child.php

  访问child.php能看到请求中发送了两个cookie分别为"father_set_1_/"、"father_set_3_test/cookie/child",接收到四个cookie分别是"child_set_0"、"child_set_1_/"、"child_set_2_/child"、"child_set_3_/test/cookie/child/"。
  页面打印出的$_COOKIE数组中有两个值,分别是请求时发送的数据。
  这里有个貌似奇怪的地方,打印出的$_COOKIE数组只有两个呢,第一个father.php页面不是设置了三个cookie值吗,为什么不能访问"father_set_2_/child"呢?
  这里仔细分析就没有什么奇怪的了,浏览器每次发出请求只发送父级路径和当前路径下的cookie给服务器,服务端的$_COOKIE数组也就是来自每次请求中的发送cookie,这也意味着一个页面只能访问路径设置为当前页面路径和父路径的cookie,不能访问兄弟路径的cookie。
 
php 设置cookie路径例子总结
第二次访问father.php

  第二次访问father.php打印出了二个值,也就是本次请求发送了两个值,也就是意味着father.php能访问两个值它们分别是"father_set_1_/"、"child_set_1_/"对应的路径都是"/"。
  这里就能看出来father.php虽然设置了三个cookie,但由于路径的原因浏览器请求时并没有发送其他子路径的cookie以至于不能读取。其中"child_set_1_/"是子路径下的页面设置的cookie,由于路径是本页面所在路径则能读取。
  还有一点值得注意的是,这次访问时没能打印出"child_set_0"的值,在child.php中"child_set_0"的路径是为空的,这点是默认为当前路径,而不是站点根目录的,所有子路径想设置cookie让父路径的页面访问则需要设置路径的。
 
php 设置cookie路径例子总结
第二次访问child.php
  再次访问child.php一共能打印出5个值,没能打印出路径为"/child"的cookie,这点说明浏览器只发送“直系”路径关系的cookie值

好了现在不知道你对cooke路径设置懂了没有其它就是我们要使用那个就设置那个路径了,如果是多域名就直接设置主域名就可以了,如果是目录指定目录就行了,如果是单文件指定单文件路径就可以了哦。

我们使用date函数直接显示后面带有date("Y-m-d H:i:s",$t);发现显示的为1970-01-01了,这个问题对于新手来讲可能不好理解,但对于做过几年的高手来讲小菜了。

如date("Y-m-d H:i:s",$t);。但是这样是无法调出正确的时间的,该值为空,所以会显示1970-01-01的问题

问题是国类$t是一个不正确的时间截了,我们只要利用如$t =time()这样就可以了显示正确了。

例子

echo date("Y-m-d",time());

输入是

2014.05.11

我碰到过这样的一个问题也给大家分析一下,碰到存储数据库的日期格式为 2009-1-22 了,如果我们还使用


echo date("Y-m-d",'2009-1-22');这样也会有问题 1970-01-01

echo date("Y-m-d",'abc'); 也会有问题 1970-01-01

上传文件出现问题, 检查了一遍发现是php.ini配置问题我们只要修改php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项即可。

php的配置:

 代码如下 复制代码

upload_max_filesize = 200M


nginx配置:

 代码如下 复制代码

client_max_body_size 200m;

按说没啥了额, 又怀疑是否是 nginx 做反向代理这里的限制,也检查过了没问题。

又仔细观察了一下 , $_POST 过来的数据是空的, 难道是 POST 大小的问题?  检查了php.ini, 还真的有一个配置项:

 代码如下 复制代码

upload_max_filesize = 8M

改为 200M, 重启一下 php, OK!! 搞定!!  还真的是 POST过来的数据大小超过限制了!

下现附给没有服务器操作权限的朋友

在PHP上传上加入下面的代码,即可暂时让PHP能上传大文件,如下

 代码如下 复制代码

<?php 
//HTTP上传文件的开关,默认为ON即是开 
ini_set('file_uploads','ON');
//通过POST、GET以及PUT方式接收数据时间进行限制为90秒 默认值:60 
ini_set('max_input_time','90');
//脚本执行时间就由默认的30秒变为180秒 
ini_set('max_execution_time', '180');
//Post变量由2M修改为8M,此值改为比upload_max_filesize要大 
ini_set('post_max_size', '12M');
//上传文件修改也为8M,和上面这个有点关系,大小不等的关系。
ini_set('upload_max_filesize','10M'); 
//正在运行的脚本大量使用系统可用内存,上传图片给多点,最好比post_max_size大1.5倍 
ini_set('memory_limit','20M');
?> 

有此主机商是把ini_set函数禁止使用了,我们可以使用下面函数来检测

 代码如下 复制代码

<?php 
echo ini_get('file_uploads')."n";  
echo ini_get('max_input_time')."n";  
echo ini_get('max_execution_time')."n";  
echo ini_get('post_max_size')."n";  
echo ini_get('upload_max_filesize')."n";  
echo ini_get('memory_limit')."n";  
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: