php获取textarea的值是十分简单的 textarea回车换行为 \r\n 下面看例子
HTML代码:
代码如下 | 复制代码 |
<Textarea name=”test” rows=”3″ cols=”20″ id=”test”></textarea> |
PHP代码:
代码如下 | 复制代码 |
$str=$_GET['test']; |
所有代码:
代码如下 | 复制代码 |
<html> </body> |
看一段dz论坛中例子
不多说了,上代码:
代码如下 | 复制代码 |
$names = preg_split('/\r\n/',$_POST['textarea']); foreach($names as $name){ // todo something eg: echo $name; } |
取值很简单,那么赋值呢,在textarea中输出换行符可没那么简单
代码如下 | 复制代码 |
$vals = get_from_mydb(); $tmp = ''; foreach($vals as $val){ $tmp .= $val.' '; } “ ”和” ”是什么意思 |
相信大家都看到了,其实textarea中的回车变成字符就成”\n”了,所以php处理textarea中的回车其实就是处理字符中的”\n”.
下文来看看php session 同ip不同端口的多个网站session冲突的解决办法,希望文章能帮助到大家。发现原因:
在局域网内使用IP加端口的访问方式搭了两个相同程序的站,结果发现用户在一个站下登录后,在另一个站也同时登录了,在一个退出后,另一个站也同时退出了。看了下程序发现两个站都是使用纯session方式记录登录状态,Cookie中只保存有PHPSESSID这个数据,而且由于使用的IP加端口形式,发现他们两个站的Cookie作用域是相同的,都是属于该服务器IP,这也就是导致这个问题的原因了。
解决方法:
/*————————————————-以下是废话————————————————-*/
1.把程序改为使用cookie记录使用的,两个站使用不同的cookie前后缀? 还是算了,懒的改。
2.由于服务器上有DNS服务,给这两个站绑定两个不同的域名,然后给局域网内的所有用户修改DNS地址?我去,那么多台电脑,只能我一个个去改,也不符合我们这种技术?诺姆绺癜 ! 而且还是懒。。。算了。
3.给服务器增加一个IP,给两个站绑定到不同的IP上去,局域网那么多的IP,闲着也是闲。方法可以行,试着弄了下又发现问题了:直接在本地连接中给这个网卡加一个IP,发现在不同的网关中,会提示MAC地址冲突。由于不太懂网络搭建,想添加一个虚拟网卡, 给虚拟网卡分配一个IP不就行了?两个网卡两个MAC应该没问题了吧,试了下发现虚拟的东西只能在本台计算机上使用。其它计算机是ping不通无法使用的。。 虽然后来又发现该服务器有两个物理网卡,只是第二个网卡没线插了也没权限去机房搞网线插。。还是算了。
4.最后还是通过程序上实现了。。。
/*————————————————-以上是废话————————————————-*/
在程序的common文件或是其它公用文件中加入一句php代码,如下:
ini_set(‘session.name’, ‘PHPSESSID_RS’);
当然 第二个参数就是session在保存到cookie时使用的名字,你可以自己设置自己喜欢的。。。
就是因为所有程序使用的session名都是在php.ini中设置的默认名称PHPSESSID, 所以 如果同域(同IP不同端口)下的网站之间使用session时会出现共用冲突情况。现在两套程序使用不同的session.name来保存sessionid,所以就不会产生session的冲突问题了。
问题解决!
PS:马蛋, 我的键盘又有两个键坏了。。问一句,为什么键盘会出现有的键按了没反应,即使在安全模式(顿号)PE系统中,而且该现象会发展,发展到这个键所在的一列都会挨个没反应,然后发展下一列。。最后发展成抛弃键盘直接使用虚拟桌面键盘的地步。。。
补充一篇:java解决办法
一个服务器上搭建了多个tomcat或者weblogic,端口不一样,同时启动访问时session丢失。如:A,B两个服务,在浏览器中登录访问A后,当前打开的浏览器上在开一个选项卡访问B服务后,回过来点击访问A时session丢失,需要重新登录A才可以访问。经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的session丢失。 如果IP不同,则不会发生这个问题。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。
解决方法:
方法1:将不同的多个应用服务在不同的虚拟主机中,或者映射不同的IP进行部署。
方法2:对应tomcat服务处理方式:修改coocie的名称保证cookie不重复,即jsessionid的不重称,保证ip相同下sessioncookiename域名不同。
1、tomcat5修改方法
在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数
linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘
win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“
2、tomcat6和tomcat7修改方法相同
tomcat增加参数对所有Context生效,影响甚大,所以到以后的版本可以就仅针对Context设置了
在Context容器标签上增加sessionCookieName参数
<Context path=”/” docBase=”webapp” reloadable=”false”sessionCookieName=”yoursessionname”></Context>
3、weblogic修改方法
设置各个应用使用不同的cookie-name。
weblogic的设置(设置不同的cookie-name):
请在WEB-INFWeblogic.xml添加如下代码
<session-descriptor>
<cookie-name>JSESSIONID1</cookie-name>
</session-descriptor>
session共享问题原因于自己几个不同站之间需要实现session共享了,下面小编整理了一些session共享文章,希望对大家有帮助。使用lvs或者nginx进行web的负载均衡时,一般都会遇到session共享的问题,因为一般PHP网站的session是以文件的形式存储于服务器本地的硬盘上。多个服务器进行负载均衡时,将会出现用户请求被分配到其他服务器上后session丢失的问题。解决方案主要有以下几个思路。
1.将session存储在共享的设备上,例如NFS等文件系统上
这种解决方案很容易实现,无需做特殊设置,将nfs目录mount至php的session存储目录即可。缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。
2. 基于数据库的Session共享
首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势
3. 基于Memcache的Session共享
Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势。
另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力
1.首先安装memcache,以及memcache在php中的扩展
2.修改php.ini文件
代码如下 | 复制代码 |
session.save_handler = memcache |
使用多个 memcached server 时用逗号”,”隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,类似这样的:”tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2″
。
3.大功告成,重启apache和memcache看看phpinfo里的session配置是不是变成了memcache了。
4.自己的程序完全不用修改,系统已经自己去找memcache来做他的session宿主啦。
PS:如果不想整台服务器全局都是用memcache的话也可以用如下两种方法:
代码如下 | 复制代码 |
修改 .htaccess php_value session.save_handler “memcache” 修改程序 ini_set(“session.save_handler”,”memcache”); |
如果要在某个数组中删除一个元素,可以直接用的unset,但今天看到的东西却让我大吃一惊
<?php
$arr = array('a','b','c','d');
unset($arr[1]);
print_r($arr);
?>
print_r($arr)
之后,结果却不是那样的,最终结果是 Array ( [0] => a [2] => c [3] => d )
那么怎么才能做到缺少的元素会被填补并且数组会被重新索引呢?答案是
array_splice():
<?php
$arr = array('a','b','c','d');
array_splice($arr,1,1);
print_r($arr);
?>
print_r($arr)之后,结果是Array ( [0] => a [1] => c [2] => d )
删除数组指定元素
array_search()比较实用
array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false
$array = array('1', '2', '3', '4', '5');
$del_value = 3;
unset($array[array_search($del_value , $array)]);//利用unset删除这个元素
print_r($array);
输出
array('1', '2', '4', '5');
但这种如果要重新索引数组就需要利用foreach遍历删除的数组之后重新建立一个数组这样也是可以的。
我们工作中用到最多的就是查询或统计出两个时间差了,下面我就整理了了PHP计算两个时间的差几个例子,其实就可以统计秒 分 时 天 月 年哦,下面来看看例子。两个时间之间月份差实例代码:
代码如下 | 复制代码 |
$yourdate="2012-10-20"; |
例子1
代码如下 | 复制代码 |
/* |
例子2
代码如下 | 复制代码 |
<?php /* 这个只是提示 echo "两个时间相差 $d 天 $h 小时 $m 分" |
例子3
代码如下 | 复制代码 |
<?PHP /* $Date_List_a1=explode("-",$date1); $d1=mktime(0,0,0,$Date_List_a1[1],$Date_List_a1[2],$Date_List_a1[0]); $d2=mktime(0,0,0,$Date_List_a2[1],$Date_List_a2[2],$Date_List_a2[0]); $Days=round(($d1-$d2)/3600/24); return $Days; echo getChaBetweenTwoDate('2010-08-11','2010-08-16'); |
例子4
代码如下 | 复制代码 |
<?php |
例子四是我最喜欢的一个可以计算到天小时秒哦,当然具体的还是需要根据自己的需要了。