php网站搬家引起的”syntax error unexpected $end”解决办法

由于美国服务器访问速度太慢,今天把wordpress程序迁移到韩国的win服务器,在iis7下报错。于是在wp-config.php中打开调试发现如下错误:

Parse error: syntax error, unexpected $end in ……

出错的位置在文件的最后一行,”?>”,网上查说是php语言使用不规范引起的,有的地方开头使用”<?php”,有的地方用”<?”,造成匹配问题。

后来在iis7的php manager插件中编辑php配置就解决了,原因可能是php.ini的默认配置不支持一些wordpress的插件吧!可以在图形界面下修改,也可以找到该文件手动修改。

网上查到相同的问题,并附上原因,摘抄如下:

报错的原因是:集成安装环境包默认的情况下不支持 PHP 短标签
解决办法:打开 php.ini ,找到 short_open_tag = Off 这一行,将 Off 修改为 On,保存退出,重启 Apache 就可以了。

详细的错误分析:

In PHP 5, the following error may appears as an error entry in Apache error log or simply displays on PHP web page, even if calling to php scripts with php_info() works perfectly and successfully returns information on PHP configurations:
Parse Error: syntax error, unexpected $end in ….. scripts.php on line …
The error may caused by a missing curly bracket in PHP script coding. Beside, it may also caused by error in PHP coding in class definition, as in PHP, a class definition cannot be broke up and distributed into multiple files, or into multiple PHP blocks, unless the break is within a method declaration.
But more commonly, the error is often caused by the use of Short Open tags in PHP, To use short open tags, it must be enabled in PHP.INI. Search for short_open_tag in PHP.INI, and change the value to On. The line should look line:
short_open_tag = On

web.config SessionState配置详解

2个.net应用部署在windows 2003 server服务器iis下面的9005端口下.使用各自独立的application pool,其<sessionState/>配置节配置为相同的

,windows 2003 server的asp.net state service服务已启动,运行稳定.
1.如果发生”Unable to serialize the session state. In ‘StateServer’ and ‘SQLServer’ mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in ‘Custom’ mode(无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。)”异常,请检查Session中存储的自定义对象是否都已进行[Serializable]标识;
2.如果发生”[0]Session中UserInfo为空”异常,请检查<sessionState/>配置节是否已在web.config中启用;
3.如果发生SessionState冲突异常,请检查2个应用的<sessionState/>配置节是否都配置为mode=”InProc”;
.NET Framework 常规参考
<sessionState> 元素
为当前应用程序配置会话状态设置。

必选属性
属性 选项 说明
mode 指定在哪里存储会话状态。
Off 指示会话状态未启用。
InProc 指示在本地存储会话状态。
StateServer 指示在远程计算机上存储会话状态。
SQLServer 指示在 SQL Server 上存储会话状态。
可选属性
属性 选项 说明
cookieless 指定不具有 Cookie 的会话是否应用于标识客户端会话。
true 指示应使用不具有 Cookie 的会话。
false 指示不应使用没有 Cookie 的会话。默认值为 false。
timeout 指定在放弃一个会话前该会话可以处于空闲状态的分钟数。默认值为 20。
stateConnectionString 指定远程存储会话状态的服务器名称和端口。例如“tcpip=127.0.0.1:42424”。当 mode 为 StateServer 时该属性是必需的。
sqlConnectionString 为 SQL Server 指定连接字符串。例如“data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind”。当 mode 为 SQLServer 时该属性是必需的。
stateNetworkTimeout 在使用 StateServer 模式存储会话状态时,指定在放弃会话之前 Web 服务器和状态服务器之间的 TCP/IP 网络连接空闲的时间(以秒为单位)。默认值为 10。

C# 汉字转数字的函数

asp.net使用后台代码做301重定向

尽管目前IIS7以上推出了微软官方的UrlRewrit模块,但是该模块也仅仅只支持http_post等类似的参数,如果需要查询数据库作为条件判断是不可能实现的。

当然,这种情况我们可以想一个变通的方式来进行,利用iis的重写到一个aspx页面,然后在该页面的代码里面进行查询数据库做条件重定向操作。

在。net 2.0下面

在。net 4.0以上更方便了

就可以了。

同理,如果希望代码返回http404状态

64位系统asp连接access数据库

今天在使用asp网站后台时发现在64bit windows2008下,访问数据库失败,报错驱动程序未安装。

网上绝大多数的方法都是到应用程序池的高级设置中,把允许32位程序启用,的确可以解决。这样就相当于程序使用32位的性能,那么升级操作系统升级服务器还有什么意义呢。

个人觉得更科学的方式是修改此asp代码里的连接字符串。

第一步,先安装驱动

Microsoft Access Database Engine 2010 Redistributable

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D

如果系统已经安装office 2007应该不用安装该驱动

 

第二步 修改连接

原来连接

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Extended Properties=”Excel 8.0;HDR=YES;IMEX=1″

修改为:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.xls;Extended Properties=”Excel 12.0;HDR=YES;IMEX=1″

 

jet驱动只有32位的,要在64位系统上使用的话只能使用wow64

开启关闭wow64可以通过iis站点高级属性里面启用32位应用程序选项

ace分为32位和64位,如果在64位系统上运行32位版本也需要用wow64,

如果在64位系统上运行64位驱动,则必须把wow64关掉 

 

设置IIS 7下asp脚本now()默认格式

上次介绍了win2003下修改asp函数NOW()的默认格式的问题。

MAXCMS如何显示当天更新的影片为红色附上IIS6 7 7.5设置方法

上面介绍的windows server 2008下的修改方式并不科学。

windows server 2008下虽然我们将控制面板中的时间日期格式改为 YYYY-MM-DD了,但 ASP 函数NOW()或DATE()取得的日期还是带/的格式。我们可以通过更改注册表来解决这个问题:
打开注册表,进入到[HKEY_USERS.DEFAULTControl PanelInternational],然后
1、将键 sDate 的值由 / 改为 –
2、将键 sShortDate 的值由 yyyy/M/d 改为 yyyy-M-d

3、重启IIS即可。

[转载]win7,IIS7,asp输出时间格式变成斜杠,而不是

[转载]win7,IIS7,asp输出时间格式变成斜杠,而不是

C# Ajax异步请求阻塞情况的解决办法

最近使用ExtJs4的mvc模式在开发了后台,因为异步请求比较多,有的回应时间长,有点短。我发现在多次并发的情况下,会造成阻塞的情况。也就是说如果回应时间长的请求还在进行中,短的请求却被挂起。

找了很多资料,最终确定是asp.net session造成的。好像php也存在此类问题。

现象:在一个网站中,当访问一个处理比较耗时的页面(A页面),页面请求还没有返回时,此时再点击访问该网站的其他页面(B页面)会出现B页面很久都没有响应和返回,直到A页面输出返回数据时才开始处理B页面的请求,造成请求排队处理,A页面阻塞了B页面的请求处理。

 

在一次的无意中我发现竟然在A页面Loading(页面上加的提示)的时候,可以访问某个页面,真是惊喜,再试试几次,可以,确实可以,是不是页面代码阻塞了?于是查这两个页面的代码,其实这两个页面的代码就十几行,没什么问题呢。

 

经过多次尝试和比对,才发现这两个页都是无需登陆验证的页面,之前出现阻塞的页面都是需登陆验证后才可访问的页面,而系统的验证信息是存储在Session中,通过Session判断验证的。这时想到应该是Session的问题,但还是不知如何处理,再去网上搜索,互联网上的信息真是应有尽有,终于搜索到问题所在:

/************************************************************/

问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制?
答:Session实现了Reader/Writer的锁机制:
当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState=”True” %>标记),此时直到请求完成该页面的Session持有一个写锁定。
当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState=”ReadOnly” %>标记),此时知道请求完成该页面的Session持有一个读锁定。
读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。

“写锁定将阻塞所有的读写锁定”,也就是说页面在EnableSessionState=”True”的情况下没返回输出时,一直持着Session写操作,其他页面对Session的读操作必须等待,而asp.net的aspx页面默认是EnableSessionState=”True”,每个页面从请求开始至返回一直持着Session写操作,需验证页面必须读取Session值判断,这就是为什么需验证的页面请求被阻塞的原因。只要耗时页面(A页面)没有Session的写操作,也就不会阻塞其他页面的请求,于是修改A页面的EnableSessionState=”ReadOnly”,例如:<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”TBS_Monitor_List.aspx.cs” EnableSessionState=”ReadOnly”  Inherits=”TBS_Monitor_List” %> ,问题解决。

也就是说,在无需对session进行写操作的页面,加上EnableSessionState=”ReadOnly” 属性,就不会造成Request阻塞的情况了。

HtmlAgilityPack HtmlWeb.Load() 不支持 gzip 的解决方法

这几天想做用现在比较流行的HtmlAgilityPack重写下采集的功能,看了一些HtmlAgilityPack 的介绍,感觉非常好用,还内置了htmlWeb用来http请求。但是发现有的开启了gzip压缩的网页请求时会报错。

原来的代码如下:

报错信息为gzip”不是受支持的编码名。

在谷歌上搜索了半天,终于找到解决方案,而且不必更换HttpRequest或WebClient进行请求。同时还可以用此方法设置cookie,render伪装等等。。。
解决后代码如下:

EXTJS4 登录窗口

最近为了方便维护管理网站,放弃了旧版的asp后台,重写了基于Extjs4.0的mvc模式新后台。

后台登陆的页面也使用的ext4 因为反正也要缓存ext-all.js嘛,后台使用ext对我这种美工能力差的来说还是比较方便的。

登录窗支持验证码,回车事件提交。代码如下:

login.js源码

Asp.Net 在ashx文件中 Session 为 null

今天在做登录验证码的时候发现code.ashx中无法设置session,错误信息为context.Session是空值。报错代码如下: