今天帮别人弄网站的时候要修改数据库字段
然后发现苦逼的事情
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/
运行结果 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"> |
test.php
代码如下 | 复制代码 |
<?php //实际应用中很可能是查询数据库取内容。 |
先看phpcms中的一个函数
代码如下 | 复制代码 |
phpcms/libs/classes/param.class.php public static function set_cookie($var, $value = '', $time = 0, $path = '') { |
这个函数与cookie没什么区别我们先不介绍它,可能很多朋友懂,下面我们再看
setcookie函数的第四个参数为cookie路径,关于路径的设置,本文做了一些尝试,下面是两个测试页(直接用url表示路径和文件目录了):
http://localhost/test/cookie/father.php
http://localhost/test/cookie/child/child.php
代码如下 | 复制代码 |
<?php //setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); print_r($_COOKIE); |
代码如下 | 复制代码 |
<?php //setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); print_r($_COOKIE); |
分别按如下顺序访问页面father.php—>child.php—>father.php—>child.php,使用firebug查看,分别有如下结果:
图中可以看出,本次请求服务端做出响应,打印了$_COOKIE数组,但数组为空。设置了三个cookie值,分别是:"father_set_1_/"、"father_set_2_/child"、"father_set_3_test/cookie/child",它们对应的路径为"/"、"/child"、"/test/cookie/child",其中"/"指的是站点根目录。
访问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/"。
第二次访问father.php打印出了二个值,也就是本次请求发送了两个值,也就是意味着father.php能访问两个值它们分别是"father_set_1_/"、"child_set_1_/"对应的路径都是"/"。
好了现在不知道你对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 |
有此主机商是把ini_set函数禁止使用了,我们可以使用下面函数来检测
代码如下 | 复制代码 |
<?php |