当php程序出错了,默认的是显示一些错误到页面上的。我们当然希望捕捉到这些错误并处理了。Php提供了set_error_handler这个接口,但是她不是万能的。先看这个文件吧。
<?
error_reporting(E_ALL);
ini_set(’display_errors’,'0′);
ini_set(’log_errors’,'1′);
ini_set(’error_log’,'/home/liubin/aaaa.log’);
ini_set(’html_errors’,'0′);
set_error_handler(’myHandler’);
function myHandler($code, $msg, $file, $line) {
echo $code;
}
echo $asdf;
method_aaa();
?>
执行之后,页面显示8,即一个notice级别的错误,这是echo $asdf;的错误。myHandler得到了她,aaaa.log没有记录她。而调用不存在的方法的错误,myHandler则得不到。被记到了aaaa.log了。
看了一下手册,好像myHandler不能记录error等错误,详见
http://php.chinaunix.net/manual/zh/function.set-error-handler.php
这可如何是好呢。我要把error捕捉再转向到错误页面难道就没办法了?
总感觉稍微慢了点。
可惜我已经写了好几个页面了。不过还是放弃了,打算用yahoo的yui
另一原因就是yui的东西比较全,包括颜色选择都有了,正好。希望她不要太慢了。
用ajax的时候
$.ajax({
type: “POST”,
url: “http://xxx.com/“,
data: “value=2a3jkf42saf3gas4aca423″,
success: function(msg){
this;
},
error:function(msg,status){
this;
}
});
文档是这么写的,但是如果想在success或error里做和上下文相关的处理
但是有不想记住全局唯一的id,想给这个ajax传个参数,还好jquery允许ajax方法
提供非标准参数,比如
$.ajax({
type: “POST”,
success: function(msg){
alert(this.oldval);
},
oldval:someVarFromCaller,
});
在调用$.ajax的时候,同时传个oldval过去,在失败的时候处理用。
每天1点多睡,16个小时都在看电脑。
jquery的$取得的原来不是dom对象,是jquery对象,要想调用dom的方法,先要转换为dom对象,比如$(”#divid”)[0]
另今天从他们网站下的ui的部分竟然很多不能用和例子里的文件名都不一样,不知道是不是我下的版本不同呢。
今天下午突然发生的大地震,目前已经夺去了7000多人的生命。
也许这个数字还会增加,不知又有多少人流离失所。
希望我们的政府真的尽到人民公仆的义务,不要再拿老百姓不当人。
默哀!!!!!!!!
=========================================
php.ini设置文件中:
display_errors = On
打开在页面显示错误信息。
Fatal error: require() [function.require]: Failed opening required …
决定自己做一个相册了,语言采用php,模板采用smarty。
今天开始用DBDesigner开始做db设计。
编辑器就用editplus了。
域名还没想好。
今天先想这么多,早点睡觉了。
优点:
界面很简单,管理界面几乎都是纯文字,没有图片。
任何东西都能当作主页的menu放进去,比如建立一个page,一个blog,甚至一个论坛主题,都可以放到主页作为一个menu。而且都可以指定一个/aboutus这样的url。
Menu的可定制,包括是否显示和显示位置
用户管理很强,可以自定义role,定义role对各个功能的权限。
功能很强大,支持blog,story,page,poll,forum等,对一个简单的团体来说是够了。
扩展性强,很多module可供选择。
Theme支持。
多语言支持,几乎所有语言都提供了语言包。
UTF8,怎么都不乱码。
缺点:
对多媒体文件支持不太好,不能直接显示或播放。
module太多,挑花了眼。想在内容里直接显示图片,或者媒体播放界面,一搜n多module,不知选哪个好。
Rich编辑器没有,也要module。据说很多人最后都平板编辑了,直接用html。
其实就是一个简单的update语句
UPDATE TAB1 SET COL1 =
SUBSTRING(COL1 FROM 1 FOR POSITION( "AAAAAA" IN UPSHIFT(COL1))-1)
|| "BBBBBB"||
SUBSTRING(COL1 FROM
POSITION( "AAAAAA" IN UPSHIFT(COL1)) + 7
FOR CHAR_LENGTH(COL1) - POSITION( "AAAAAA" IN UPSHIFT(COL1)) - 7)
WHERE POSITION( "AAAAAA" IN UPSHIFT(COL1)) > 0;
这个语句就是想把一个字段的AAAAAA替换成BBBBBB而已,不过sql/mp没有提供replace之类的函数,只好用这样的土方法了。(如果这个字段有5个AAAAAA,则这个语句要执行5次,呵呵,够土)
但是执行的时候出错:
*** ERROR from SQL [-8300]: File system error occurred on
*** \XXXXX.$DATA01.TEST.TAB1.
*** ERROR from File System [1133]: […]
还是发现了一些病毒,或者叫做木马。
又搞了半天,更有点对病毒作战的感悟
首先是两个软件很不错,一个是冰剑(IceSword),一个是SREng(System Repair Engineer)
冰剑可以删除taskmanager不能杀得进程,也能删掉explorer不能删掉的文件。
SREeng可以发现注册表的问题,今天就是它提示的,提示APPINIT_DLLS被修改了。就用冰剑把那个文件(dll)删掉了。
二是禁用VB脚本,尽量使用firefox了。
在当前用户的temp下发现了类似这样的文件
Set Shell = CreateObject(”Wscript.Shell”)
Shell.Run(”C:\DOCUME~1\a\LOCALS~1\Temp\zj.exe”)
set Shell=Nothing
i=1
下面的这条命令可以禁止文件系统对象(FileSystemObject)
regsvr32 scrrun.dll /u
总之,另外,这几次发现的都是盗用密码之类的木马,而且都是明目张胆的往某些ip地址post数据,抓出这些傻逼病毒使用者/制造者很容易吧,我们的保护神公安局在干什么呢?
以下来自网络搜索结果,我也没全尝试:
_______________________________________
2、禁用Wscript.Shell组件:
Wscript.Shell可以调用系统内核运行DOS基本命令。可以通过修改注册表,将此组件改名,来防止此类木马的危害。HKEY_CLASSES_ROOT\Wscript.Shell\ 及HKEY_CLASSES_ROOT\Wscript.Shell.1\改名为其它的名字。将两项clsid的值也改一下HKEY_CLASSES_ROOT\Wscript.Shell\CLSID\项目的值和HKEY_CLASSES_ROOT\Wscript.Shell.1\CLSID\项目的值,也可以将其删除。
3、禁用Shell.Application组件
Shell.Application也可以调用系统内核运行DOS基本命令。可以通过修改注册表,将此组件改名,来防止此类木马的危害。HKEY_CLASSES_ROOT\Shell.Application\ 及HKEY_CLASSES_ROOT\Shell.Application.1\ 改名为其它的名字。将HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值更改或删除。同时,禁止Guest用户使用shell32.dll来防止调用此组件。使用命令:cacls C:\WINNT\system32\shell32.dll /e /d guests
4、FileSystemObject组件
FileSystemObject可以对文件进行常规操作可以通过修改注册表,将此组件改名,来防止此类木马的危害。对应注册表项为HKEY_CLASSES_ROOT\scripting.FileSystemObject\。可以禁止guests用户使用或直接将其删除。考虑到很多的上传都会使用到这个组件,为了方便,这里不建议更改或删除。
Nsk里的Define跟c语言里的define类似,不过不是语言级别的,是执行环境级别的,或者说是session级别的。Logon之后定义的define,logoff之后就没了,下次logon还要在执行(手工或者放到logon之后自动执行的脚本里)
Define的好处就是方便,简单。比如程序读写文件,实际的文件名随时会变,大多数情况下都会把要读写的文件放到一个固定的config文件里,然后从config里来得到文件的路径。Nsk的话,在程序里只需要使用理论名(即define值)。
Define是一个key value类型的,程序使用key,至于value是什么,执行之前指定就行了。
先说define名,就是上面的那个key了,必须是=开头,长度(包括=)2-24,第二个字符必须是英字母。
Define属性。最主要的是class属性,指定define的类型,包括sql的catalog,defaults,map(key-实际文件名),spool,tape等。经常用的就是catalog和map了。
这是一个简单的map的例子
$DISK SUBVOL 4> ADD DEFINE =MYDEF , CLASS MAP , FILE $DISK.SUBVOL.FILE1
$DISK SUBVOL 5> info define =MYDEF
Define Name =MYDEF
CLASS MAP
FILE […]