php在IIS下和apache下urlrewrite返回不同的REQUEST_URI解决办法
php在windows IIS平台运作的时候,有些东西和在Linux apache下不太一样。
今天遇到个神奇的问题,就是用$URI=$_SERVER["REQUEST_URI"];
在linux下看到的是urlrewrite静态化以后的地址 /exy/exk/list-3/
windows下返回的是原来的地址 /exy/article.php?page=3
这时候发现windows下有个办法HTTP_X_REWRITE_URL
这个数组,linux下没有
所以代码小修改下以兼容两个平台。(更换服务器真是各种水土不服)
代码如下 | 复制代码 |
$URI = $_SERVER["HTTP_X_REWRITE_URL"]; |
这样就两个平台都能正确的显示了。
本文章来给大家介绍关于在window下PHP调用curl报内存不够(curl out of memory)错误的解决办法,有碰到此类问题的朋友可参考。
今天在调用新浪微博api的时候(官网下载的sdk),发现发布图片微博的时候不成功,报错说:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4294962523 bytes) in XXXsdksinasaetv2.ex.class.php on line 396
实在想不明白啊,不就上传个图片嘛,至于需要这么大内存吗!?
开始想官网提供的sdk,如果是代码有问题肯定其他开发者也碰到了,于是乎去新浪微博开发平台找答案,怪的很没人说起(不知道是大家都没碰到这问题还是咋的)。没办法,只能请谷歌。
一查还真有点头绪了,大部分出现这个问题的都是因为:用curl请求https,由于在获取证书的时候出问题了,这帖子感觉说的还行:CURLOPT_SSL_VERIFYPEER惹得祸,感兴趣的童鞋可以去看一下。但这个不是我这的原因,不扯远了,继续解决自己的错误。
照上面的帖子行不通,继续找。
但是这个里面的一句话给提醒了我,"出问题的服务器是Windows,工作的是linux。"。这有戏啊,问题可能出在php版本或跟操作系统上,于是把代码那linux上一测试,发现还真的没问题,大喜。
于是加了个关键字"window"重新搜了一遍,还真是这样,php官网果断的出现在了搜索结果里面里面,答案就在这:http://windows.php.net/。
看一下自己php的版本 5.2.5,活该出问题,不勤快点升级。
不多说,不过在写文章的时候又发现了这个(使用微博api发带图片的微博,提示内存不够,这哥们可比我惨多了,估计把所得内存都加上了之后才发现有点不头,哈哈),得来的全不费功夫啊(可惜这时候问题已经被我发现了,只是还没解决)。
解决方法:简单的解决方法就是升级一下php,敬业一点的方法当然就是自己改改代码,怎么改这 是个问题,我表示我不敬业,而且都懒得去升级。
我们利用java把数据写入然后利用php读出,但这样利用php读出时发现了在memcache乱码问题出来了,下面我来给大家介绍memcache乱码的解决办法。java读取php写入memcache内容
故事背景:我用java插入一条数字记录,用php读取无法正确读取。
今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php调出来就是乱码。
对象可以理解,简单的数字也会乱码
如
代码如下 | 复制代码 |
mcc.set("a",25); |
php中出来的是乱码,同时如果采用telnet的方式来进行查询
get a
出来问号。
翻了一圈说要改类包。
最后发现个问题,如果改用字符串,那么java和php就能通用了。
代码如下 | 复制代码 |
mcc.set("a","25″); |
而且telnet 192.168.0.1 11211进入进行get也能得出正确的数字了。
本来我要对a这个值进行加法运算,觉得采用int会方便一些,居然和php读取memcache的时候有冲突。还是来回进行变量类型转换吧。
如果你也在使用java写入memcache,php读出memcache,通用一个字符串存储,就可以避免很多问题了。
不是java的类包不行。
java读取php写入memcache内容
当前需求:php将key为"my_key",value为"my_value"写入到memcache中,然后用java连接memcache读取my_key的值my_value。
php端的代码为:
代码如下 | 复制代码 |
<?php |
经检测,php写入后,用php和在memcache命令行都能获取的很好。
但是,用下面的java代码获取,却获取到null
代码如下 | 复制代码 |
import com.danga.MemCached.MemCachedClient; public class CacheReader { static private MemCachedClient client =new MemCachedClient(); |
一开始,我还以为是我的编码的问题,或者是某些参数设置的问题。后来,我想可能是各种memcache的客户端的寻址方式不太一样吧。几经周折,还是间接的解决了这个问题:我更换了java端的memcache的客户端,采用net.spy.memcached.MemcachedClient就可以了。代码如下:
代码如下 | 复制代码 |
import java.io.IOException; import net.spy.memcached.MemcachedClient; public class SpyMem { |
1. 原因分析:
在存储到数据库时!MySQL 不会存储 unicode 字符:
MySQL 仅支持从基本的多语种平面字符 (0×0000-0xFFFF)。请尝试存储一个同义词相反:)
更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用 UTF8MB4 编码。
json_encode中文的时候,会把每个中文字符encode成“uxxxx”
而存进数据库的时候,“”被屏蔽了,直接变成”uxxxx”
2. 解决问题:
知道是什么原因就好解决问题了,你可以选择其他存储方式;
或者再对症下药进一步转义””为“\”,以保留””
我们的解决方案:
1. 避免json_encode将中文转换unicode编码.
PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
$test = json_encode("深圳", JSON_UNESCAPED_UNICODE);
2. 先将中文字段urlencode,json_encode后,再用urldecode,也可以保证中文不会被转成unicode。
$test =urldecode(json_encode(array('brief'=>urlencode('简介'),'title'=>urlencode(标题)));
3. 进一步转义””为“\” 避免unicode中文前’'被mysql当成特殊字符去除
原创解决: Fatal error: session_start(): Failed to initialize storage module: files问题
之前编译安装的LNMP环境+phpmyamdin4.02的版本,今天突然出现这个问题:
Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /data/www/phpmyadmin/libraries/session.inc.php on line 83
大致意思是session会话初始化的时候储存路径有误!第一反应就是查看php.ini的配置文件中的:
代码如下 | 复制代码 |
|
默认前面是加的分号,表示不启用,我之前配置的时候已经启用了。那为什么还会报错呢?,于是网上找了一些资料,感觉都千篇一律:
1、检查error.log(Apache2.2logs)文件,查看是否有错误报告。未发现。
2、检查php.ini中的session.save_handler的值是否为files,如果不是改为files
3、检查php.ini文件中session.save_path是否被注释了,如果有,则去掉前面的”;”。
4、将save_path后面的路径改成已有的路径,比如”D:phptemp”
5、检查temp文件夹的属性是否可读可写。
6、重启APACHE服务器。OK
不知道那些哥们转载的时候自己试过了没有(在这里喷一下,最讨厌那种自己都没有亲测,就一股脑的转来转去。一点都不负责!)
根据上面的流程,排查了之后发现压根就没有解决,不过璞玉的服务器是nginx非apache。
然后自己写了一个脚本test.php:
代码如下 | 复制代码 |
$r = session_start(); var_dump($r); |
打印结果为:
Warning: session_start(): SAFE MODE Restriction in effect. The script whose uid is 501 is not allowed to access /tmp owned by uid 0 in /data/www/test.php on line 3 Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /data/www/test.php on line 3
意思是 php5一个安全模式的bug,默认session的save_path是系统的临时目录,这样会要校验权限。而这个脚本不能通过/tmp拥有者uid为0来执行uid是501也是www用户组的权限
解决这个有两种解决方法:
1。关闭安全模式;
2。在命令行下chown改文件/目录的拥有者
当然两种方法都要求你有服务器的权限。
下面是璞玉php.ini的配置文件:
代码如下 | 复制代码 |
[Session] ; Handler used to store/retrieve data. ; http://php.net/session.save-handler session.save_handler = files; Argument passed to save_handler. In the case of files, this is the path ; where data files are stored. Note: Windows users have to change this ; variable in order to use PHP's session functions. ; ; The path can be defined as: ; ; session.save_path = "N;/path" ; ; where N is an integer. Instead of storing all the session files in ; /path, what this will do is use subdirectories N-levels deep, and ; store the session data in those directories. This is useful if you ; or your OS have problems with lots of files in one directory, and is ; a more efficient layout for servers that handle lots of sessions. ; ; NOTE 1: PHP will not create this directory structure automatically. ; You can use the script in the ext/session dir for that purpose. ; NOTE 2: See the section on garbage collection below if you choose to ; use subdirectories for session storage ; ; The file storage module creates files using mode 600 by default. ; You can change that by using ; ; session.save_path = "N;MODE;/path" ; ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the process's umask. ; http://php.net/session.save-path session.save_path = "/tmp" ; Whether to use cookies. ; http://php.net/session.use-cookies session.use_cookies = 1 ; http://php.net/session.cookie-secure ;session.cookie_secure = ; This option forces PHP to fetch and use a cookie for storing and maintaining ; the session id. We encourage this operation as it's very helpful in combatting ; session hijacking when not specifying and managing your own session id. It is ; not the end all be all of session hijacking defense, but it's a good start. ; http://php.net/session.use-only-cookies session.use_only_cookies = 1 ; Name of the session (used as cookie name). ; http://php.net/session.name session.name = PHPSESSID ; Initialize session on request startup. ; http://php.net/session.auto-start session.auto_start = 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. ; http://php.net/session.cookie-lifetime session.cookie_lifetime = 0 ; The path for which the cookie is valid. ; http://php.net/session.cookie-path session.cookie_path = / ; The domain for which the cookie is valid. ; http://php.net/session.cookie-domain session.cookie_domain = ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. ; http://php.net/session.cookie-httponly session.cookie_httponly = ; Handler used to serialize data. php is the standard serializer of PHP. ; http://php.net/session.serialize-handler session.serialize_handler = php ; Defines the probability that the 'garbage collection' process is started ; on every session initialization. The probability is calculated by using ; gc_probability/gc_divisor. Where session.gc_probability is the numerator ; and gc_divisor is the denominator in the equation. Setting this value to 1 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance ; the gc will run on any give request. ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 ; http://php.net/session.gc-probability session.gc_probability = 1 ; Defines the probability that the 'garbage collection' process is started on every ; session initialization. The probability is calculated by using the following equation: ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and ; session.gc_divisor is the denominator in the equation. Setting this value to 1 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance ; the gc will run on any give request. Increasing this value to 1000 will give you ; a 0.1% chance the gc will run on any give request. For high volume production servers, ; this is a more efficient approach. ; Default Value: 100 ; Development Value: 1000 ; Production Value: 1000 ; http://php.net/session.gc-divisor session.gc_divisor = 1000 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. ; http://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440 ; NOTE: If you are using the subdirectory option for storing session files ; (see session.save_path above), then garbage collection does *not* ; happen automatically. You will need to do your own garbage ; collection through a shell script, cron entry, or some other method. ; For example, the following script would is the equivalent of ; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): ; find /path/to/sessions -cmin +24 | xargs rm ; PHP 4.2 and less have an undocumented feature/bug that allows you to ; to initialize a session variable in the global scope, even when register_globals ; is disabled. PHP 4.3 and later will warn you, if this feature is used. ; You can disable the feature and the warning separately. At this time, ; the warning is only displayed, if bug_compat_42 is enabled. This feature ; introduces some serious security problems if not handled correctly. It's ; recommended that you do not use this feature on production servers. But you ; should enable this on development servers and enable the warning as well. If you ; do not enable the feature on development servers, you won't be warned when it's ; used and debugging errors caused by this can be difficult to track down. ; Default Value: On ; Development Value: On ; Production Value: Off ; http://php.net/session.bug-compat-42 session.bug_compat_42 = Off ; This setting controls whether or not you are warned by PHP when initializing a ; session value into the global space. session.bug_compat_42 must be enabled before ; these warnings can be issued by PHP. See the directive above for more information. ; Default Value: On ; Development Value: On ; Production Value: Off ; http://php.net/session.bug-compat-warn session.bug_compat_warn = Off ; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. ; http://php.net/session.referer-check session.referer_check = ; How many bytes to read from the file. ; http://php.net/session.entropy-length session.entropy_length = 0 ; Specified here to create the session id. ; http://php.net/session.entropy-file ; On systems that don't have /dev/urandom /dev/arandom can be used ; On windows, setting the entropy_length setting will activate the ; Windows random source (using the CryptoAPI) ;session.entropy_file = /dev/urandom ; Set to {nocache,private,public,} to determine HTTP caching aspects ; or leave this empty to avoid sending anti-caching headers. ; http://php.net/session.cache-limiter session.cache_limiter = nocache ; Document expires after n minutes. ; http://php.net/session.cache-expire session.cache_expire = 180 ; trans sid support is disabled by default. ; Use of trans sid may risk your users security. ; Use this option with caution. ; - User may send URL contains active session ID ; to other person via. email/irc/etc. ; - URL that contains active session ID may be stored ; in publically accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. ; http://php.net/session.use-trans-sid session.use_trans_sid = 0 ; Select a hash function for use in generating session ids. ; Possible Values ; 0 (MD5 128 bits) ; 1 (SHA-1 160 bits) ; This option may also be set to the name of any hash function supported by ; the hash extension. A list of available hashes is returned by the hash_algos() ; function. ; http://php.net/session.hash-function session.hash_function = 0 ; Define how many bits are stored in each character when converting ; the binary hash data to something readable. ; Possible values: ; 4 (4 bits: 0-9, a-f) ; 5 (5 bits: 0-9, a-v) ; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") ; Default Value: 4 ; Development Value: 5 ; Production Value: 5 ; http://php.net/session.hash-bits-per-character session.hash_bits_per_character = 5 ; The URL rewriter will look for URLs in a defined set of HTML tags. ; form/fieldset are special; if you include them here, the rewriter will ; add a hidden <input> field with the info which is otherwise appended ; to URLs. If you want XHTML conformity, remove the form entry. ; Note that all valid entries require a "=", even if no value follows. ; Default Value: "a=href,area=href,frame=src,form=,fieldset=" ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" ; http://php.net/url-rewriter.tags url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" |
因为这个是在一台VPS上面配置的,上面有多个项目,于是璞玉打开一个项目,发现此项
目的验证码功能是OK的。
于是查看代码如下:
代码如下 | 复制代码 |
|
上面这个代码是在session_start() 初始化之前来判断是否存在session会话的文件夹。
于是就在phpmyadmin里面的保存的那个文件/phpmyadmin/libraries/session.inc.php做了下修改:
代码如下 | 复制代码 |
|
在 session_start(); 前面添加了 session_save_path(“/data/www/session”); 就解决了这个问题。
切记通过@ini_set(‘session.save_path’, ”/data/www/session”);无效!
这个问题困扰了我几个小时,终于解决了,所以就记录下来,对日后应该会有帮助。
如果对你有帮助,请留言。如果有什么意见欢迎交流!
相关文章
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25php中json_decode()和json_encode()用法与中文不显示解决办法
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25- 在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
- 401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
- Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
- 今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
- 下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
- 自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
如何在Spring WebFlux的任何地方获取Request对象
这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
C#中HttpWebRequest、WebClient、HttpClient的使用详解
这篇文章主要介绍了C#中HttpWebRequest、WebClient、HttpClient的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21- 对于乱码这个问题php开发者几乎都会有碰到过,我们下面主要是介绍了php文件乱码和页面乱码。PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题...2015-10-21
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
Ubuntu15下mysql5.6.25不支持中文的解决办法
apt-get install 安装的,不是源码包安装的mysql1 修改mysql的配置文件/etc/mysql/conf.d/mysql.cnf在[mysql]的下方加入如下语句:(注:这个文件下没有配置,只有【mysql】)no-auto-rehash default-character-set=utf8/etc/...2015-10-21从PHP $_SERVER相关参数判断是否支持Rewrite模块
如果是http://www.jb51.net/p1141.html形式的URL,可通过$_SERVER['REQUEST_URI']和$_SERVER['QUERY_STRING']值的区别来分析,最主要是如果页面是通过重定向会产生$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIREC...2013-10-04- 本文章来给大家介绍php mail发邮件标题中文乱码的问题解决办法,希望到此类问题的朋友可进入参考。 当使用下面的PHP语句发送电子邮件的时候,如果编码和接收邮箱编码...2016-11-25
python爬虫用request库处理cookie的实例讲解
在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21