artDialog 网页对话框插件
PHP curl示例
cur进行https请求时,如果出现 curl: (35) SSL connect error
一般是发起请求的服务器ssl_version为 NSS 需要改为 openSSL
/** * 通过curl请求远程数据 * @param string $url * @param string $request_method 默认GET * @param array $post_data 默认null * @param string $do_what http_build_query/json_encode * @param array $opt_array 批量设置特殊选项 * @return FALSE | string */ function my_curl($url, $request_method='GET', $post_data=NULL, $do_what='', $opt_array=NULL){ $arr_header = array(); if($post_data){ switch($do_what){ case 'json_encode': //需要发送json数据时,对数组或对象进行json编码(微信开发此处不能包含中文,否则会有:不合法的请求字符,不能包含\uxxxx格式的字符) $post_data = json_encode($post_data); $arr_header[] = 'Content-length: '.strlen($post_data); break; case 'http_build_query': $post_data = http_build_query($post_data); //对数组或对象使用http_build_query()以提高兼容性 $arr_header[] = 'Content-length: '.strlen($post_data); break; default: } } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //curl_exec执行成功则返回结果(默认返回true),失败返回false curl_setopt($ch, CURLOPT_HEADER, false); //启用时会将头文件的信息作为数据流输出 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //连接超时时间 if(count($arr_header))curl_setopt($ch, CURLOPT_HTTPHEADER, $arr_header); if(strtolower($request_method)=='post')curl_setopt($ch, CURLOPT_POST, true); //POST方式时添加 if(strpos(strtolower($url), 'https://')===0){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //https请求时跳过cURL验证对等证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //https请求时跳过cURL验证域名 } if($post_data)curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); if(is_array($opt_array) && count($opt_array))curl_setopt_array($ch, $opt_array); $output = curl_exec($ch); // $outinfo = curl_getinfo($ch); $err_no = curl_errno($ch); $curl_error = $err_no ? 'curl: '.curl_error($ch)." $err_no" : ''; //失败时返回当前会话最后一次错误的字符串 curl_close($ch); if($err_no){ log_message('error', $curl_error); return FALSE; }else{ return $output; } }
PHP基础知识
● array get_defined_constants ([ bool $categorize = false ] )
返回当前所有已定义的常量名和值,$categorize=true 时返回常量分类后的多维数组
● json_encode($value, $flag)
对变量主要是数组进行 JSON 编码
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
JSON_ERROR_NONE (int) 没有错误发生。 JSON_ERROR_DEPTH (int) 到达了最大堆栈深度。 JSON_ERROR_STATE_MISMATCH (int) 出现了下溢(underflow)或者模式不匹配。 JSON_ERROR_CTRL_CHAR (int) 控制字符错误,可能是编码不对。 JSON_ERROR_SYNTAX (int) 语法错误。 JSON_ERROR_UTF8 (int) 异常的 UTF-8 字符,也许是因为不正确的编码。 JSON_ERROR_RECURSION (int) 传递给 json_encode() 函数的对象或数组包含了递归引用,导致无法被编码。如果打开了 JSON_PARTIAL_OUTPUT_ON_ERROR 选项,则牵涉到递归引用的数据会转换成 null 后返回。 JSON_ERROR_INF_OR_NAN (int) 传递给 json_encode() 函数的参数中包含了 NAN 或 INF,导致编码出错。如果打开了 JSON_PARTIAL_OUTPUT_ON_ERROR 选项,则牵涉到对应不可编码的数字,会转换成数字 0 后返回。 JSON_ERROR_UNSUPPORTED_TYPE (int) 传递了不支持的数据类型给 json_encode() 函数,比如 resource。如果打开了 JSON_PARTIAL_OUTPUT_ON_ERROR 选项,则对于不支持的数据类型,会转换成 null 后返回。 JSON_ERROR_INVALID_PROPERTY_NAME (int) A key starting with \u0000 character was in the string passed to json_decode() when decoding a JSON object into a PHP object. JSON_ERROR_UTF16 (int) Single unpaired UTF-16 surrogate in unicode escape contained in the JSON string passed to json_encode(). 下面的常量可以和 json_decode() 的 form 选项结合使用。 JSON_BIGINT_AS_STRING (int) 将大数字编码成原始字符原来的值。 JSON_OBJECT_AS_ARRAY (int) 将 JSON 对象作为数组解码。当调用 json_decode() 且第二个参数为 true 时此选项会自动添加。 下面的常量可以和 json_encode() 的 form 选项结合使用。 JSON_HEX_TAG (int) 所有的 < 和 > 转换成 \u003C 和 \u003E。 JSON_HEX_AMP (int) 所有的 & 转换成 \u0026。 JSON_HEX_APOS (int) 所有的 ' 转换成 \u0027。 JSON_HEX_QUOT (int) 所有的 " 转换成 \u0022。 JSON_FORCE_OBJECT (int) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 JSON_NUMERIC_CHECK (int) 将所有数字字符串编码成数字(numbers)。 JSON_PRETTY_PRINT (int) 用空白字符格式化返回的数据。 JSON_UNESCAPED_SLASHES (int) 不要编码 /。 JSON_UNESCAPED_UNICODE (int) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 JSON_PARTIAL_OUTPUT_ON_ERROR (int) 用不可编码的值来代替失败。 JSON_PRESERVE_ZERO_FRACTION (int) 确保 float 值始终编码为为 float 值。 JSON_UNESCAPED_LINE_TERMINATORS (int) The line terminators are kept unescaped when JSON_UNESCAPED_UNICODE is supplied. It uses the same behaviour as it was before PHP 7.1 without this constant. Available since PHP 7.1.0. 下面的常量可以和 json_decode() 及 json_encode() 的 form 选项结合使用。 JSON_INVALID_UTF8_IGNORE (int) 忽略无效的 UTF-8 字符。自 PHP 7.2.0 起生效。 JSON_INVALID_UTF8_SUBSTITUTE (int) 将无效 UTF-8 字符转换为 \0xfffd(Unicode 字符"虚缺号")。自 PHP 7.2.0 起生效。 JSON_THROW_ON_ERROR (int) 如果发生错误则会抛出 JsonException,而不是通过 json_last_error() 和 json_last_error_msg() 检索设置到全局的错误状态。JSON_PARTIAL_OUTPUT_ON_ERROR 优先于 JSON_THROW_ON_ERROR。自 PHP 7.3.0 起生效。
● json_decode(string $json [, bool $assoc)
对 JSON 格式的字符串进行编码
当参数$assoc为 TRUE 时,将返回 array 而非 object 。
● serialize(mixed $value)
产生一个可存储的值的表示,主要是把数组转换成字符串,便于传递
结果默认已经转义,无须再用 addslashes()
● unserialize(string $str)
从已存储的表示中创建 PHP 的值,主要是把字符串还原成数组
● array get_defined_vars — 获取由所有已定义变量所组成的数组
● array get_defined_functions — 获取所有已经定义的函数
● array get_loaded_extensions — 获取所有可用的模块
● array get_extension_funcs — 获取指定模块的可用函数,传入的参数(模块名称)必须是小写
print_r(get_extension_funcs("gd"));
print_r(get_extension_funcs("xml"));
● array get_defined_constants — 获取关联数组的名字所有的常量和他们的价值
● array get_declared_classes — 获取由已定义类的名字所组成的数组
● get_included_files() 和 get_required_files() — 返回被 include 和 require 文件名的 array
● 用 PHP_EOL 代替写入文本文件的回车换行(windows系统为 \r\n ,unix系统为 \n ,MAC 为 \r ,MAC OS X 为 \n
● file_put_contents($file, $data, FILE_APPEND | LOCK_EX)
FILE_APPEND | LOCK_EX 追加方式写入,且写入时锁定
● int memory_get_usage ([ bool $real_usage = false ] )
返回当前分配给你的 PHP 脚本的内存量,单位是字节(byte)。
int memory_get_peak_usage ([ bool $real_usage = false ] )
返回分配给你的 PHP 脚本的内存峰值字节数。
如果设置为 TRUE 可以获取从系统分配到的真实内存尺寸。 如果未设置,或者设置为 FALSE,仅会报告 emalloc() 使用的内存。
几个 PHP 的"魔术常量"
名称 | 说明 |
---|---|
__LINE__ | 文件中的当前行号。 |
__FILE__ | 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。 |
__DIR__ | 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) = |
__FUNCTION__ | 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 |
__CLASS__ | 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。 |
__TRAIT__ | Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。 |
__METHOD__ | 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 |
__NAMESPACE__ | 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。 |
- call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
- call_user_func — 把第一个参数作为回调函数调用
- create_function — Create an anonymous (lambda-style) function
- forward_static_call_array — Call a static method and pass the arguments as array
- forward_static_call — Call a static method
- func_get_arg — 返回参数列表的某一项
- func_get_args — 返回一个包含函数参数列表的数组
- func_num_args — Returns the number of arguments passed to the function
- function_exists — 如果给定的函数已经被定义就返回 true
- get_defined_functions — 返回所有已定义函数的数组
- register_shutdown_function — 注册一个会在php中止时执行的函数
- register_tick_function — 注册一个函数以便在每个 tick 上执行
- unregister_tick_function — De-register a function for execution on each tick
ASP中RecordSet Open和Connection.Execute的一些区别
如果sql是update,insert,delete则应该使用conn.execute(sql)也可以不要括号conn.execute sql
如果sql是select语句则应该使用set rs=conn.execute(sql)括号一定要,不能省略:这是因为vbscript的特性,带返回值的调用必须加括号,不带返回值的调用可以不要括号。
注意:不管是rs.open sql,conn还是conn.execute(sql) [这里的SQL是delete,update,insert]执行以后都会返回一个关闭的记录集,也就是说如果sql是插入、更新、删除语句,那么set rs=conn.execute(sql)中的RS就没什么意义。
1.conn.executesql="select * from admin where username='xiaozhu'"
set rs=conn.execute(sql)
执行完以后自动关闭记录集
最后只需要关闭连接就可以了
Set Rs=Nothing
conn.close
set conn=nothing
2.rs.open
set rs=server.createobject("adodb.recordset")
sql="select * from admin where username='xiaozhu'"
rs.open sql,conn,1,1
可以自己设定一些参数,即锁定和游标的移动方式
最后要关闭记录集和连接
rs.close
set rs=nothing
conn.close
set conn=nothing
3.command.execute
sql="select * from admin where username='xiaozhu'"
set rs=command.execute(sql)
*****************************************************************************
1.
set rs=conn.execute("如果是select语句") 得到的rs.recordcount=-1
rs.open sql,conn("sql为select语句") 得到的rs.recordcount为正常的记录数
2.
rs.open是打开数据库 conn.execute 是执行SQL指令
set rs=conn.execute(insert,update,delete)返回一个关闭了的记录集
set rs=conn.execute(select)返回一个没有关闭的记录集
3.
CONN.EXECUTE(SQL,RowsAffected,C)
参数含义:
SQL的值可以是SQL语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。为了提高性能,最好为C参数指定合适的值
可选参数RowsAffected将返回INSERT、UPDATE或DELETE查询执行以后所影响的数目。这些查询会返回一个关闭的Recordset对象。
一个SELECT查询将返回RowsAffected值为-1并且返回带有一行或多行内容的打开的Recordset。
4.
conn.execute sql适合于不需返回recordset对象时使用,比如下面的代码:
sql="delete from enews where id="&cstr(id)
conn.execute sql
如果需要返回recordset对象,则使用如下代码:
sql="select from enews where id="&cstr(id)
set rs = conn.execute(sql)
如果去掉execute(sql)这儿的括号(即为set rs = conn.execute sql),就会提示“语句未结束”这样的错误提示,我翻看了一下语法格式,发现有二种格式,详解如下:
格式一:Connection对象名.Execute(SQL指令).
格式二:Connection对象名.Execute(数据表名)。
rs.open sql,conn
rs.open sql,conn,1,1
rs.open sql,conn,3,2
rs.open sql,conn,3,3
关于上面语句中后面的数字都代表什么意思?还有省略数字(rs.open sql,conn)时默认的是哪一个?
最佳答案
RS.OPEN SQL,CONN,A,B
A: ADOPENFORWARDONLY(=0) 只读,且当前数据记录只能向下移动
ADOPENKEYSET(=1) 可读写,当前数据记录可自由移动
ADOPENDYNAMIC(=2) 可读写,当前数据记录可自由移动,可看到新增记录
ADOPENSTATIC(=3) 只读,当前数据记录可自由移动
B: ADLOCKREADONLY(=1) 缺省锁定类型,记录集是只读的,不能修改记录
ADLOCKPESSIMISTIC(=2) 悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。
ADLOCKOPTIMISTIC(=3) 乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。
ADLOCKBATCHOPTIMISTIC(=4) 批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。 当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间, 数据在这段时间被更新。这减少了资源的使用。
http://blog.sina.com.cn/s/blog_5140c6740100gnci.html
CodeIgniter命名规则
1、类文件的命名必须以大写字母开头,其他文件(配置文件,视图,一般的脚本文件等)的命名是全小写。类文件的名称必须和类的名称保持一致,例如,如果你有一个类名为 Myclass , 那么文件名应该是 Myclass.php 。
2、类名(core、libraries、helpers)必须以大写字母开头,多个单词之间使用下划线分割,不要使用驼峰命名法。
3、扩展类需要加前缀MY_(可以在application/config/config.php中自定义$config['subclass_prefix']),类名首字母大写,如扩展核心类CI_Controller:
class MY_Controller extends CI_Controller{}
4、类的方法应该使用全小写,并且应该明确指出该方法的功能,最好包含一个动词。 避免使用冗长的名称,多个单词之间使用下划线分割。
5、辅助函数的文件名全小写,但扩展CI自带的辅助函数需要加config中自定义的前缀MY_。如扩展array_helper.php的文件名应该为 MY_array_helper.php
6、变量的命名规则和类方法的命名规则非常接近,使用全小写,使用下划线分割, 并且应该明确指出该变量的用途。非常短的无意义的变量只应该在 for 循环中作为迭代器使用。
7、控制器放在子目录中,如 application/controllers/Product/Tv.php 中方法 detail() ,访问地址为: index.php/Product/tv/detail 子目录名大小写必须与实际一致(windows系统可不区分)
http://codeigniter.org.cn/user_guide/general/styleguide.html
ASP错误 -2147467259 所有记录中均未找到搜索关键字
ASP错误 80040e14 内存溢出
Microsoft JET Database Engine 错误 '80040e14'
内存溢出
主要原因:
1、字段或表名使用了保留字,如:select、insert、date等,不要使用保留字,或在sql中相应字段加方括号,如 [select]
2、要查询的字段包含特殊字符,常见的有bom标记等不可见字符,可以在数据保存时使用正则过滤掉,我的做法:regReplace(str, "[\ufeff\u2028\u2029\xa0]+", "")
3、包含日文字符,并不是所有的日文字符都有问题,而是只有26个有问题,这个是access的bug,只能在保存数据时进行转换成自定义的字符,查询和显示时再转换回去。如果不需要日文查询,可以在保存时,把相应日文转义。如你转义为你
我的做法:
Function jpEncode(ByVal s) Dim jpArr, i '26个日文字符的unicode代码 jpArr=array(12468, 12460, 12462, 12464, 12466, 12470, 12472, 12474,_ 12485, 12487, 12489, 12509, 12505, 12503, 12499, 12497,_ 12532, 12508, 12506, 12502, 12500, 12496, 12482, 12480,_ 12478, 12476) For i=0 To Ubound(jpArr) s=Replace(s, ChrW(jpArr(i)), "&#"&jpArr(i)&";") Next jpEncode=s End Function
通过预加载在图片加载前读取图片尺寸
/*************************************************************************************** * 图片头数据加载就绪获取图片尺寸 * @version 2011.05.27 * @author TangBin * @see http://www.planeart.cn/?p=1121 * @param {String} 图片路径 * @param {Function} 尺寸就绪 * @param {Function} 加载完毕 (可选) * @param {Function} 加载错误 (可选) yundanran_imageSize('http://b.zol-img.com.cn/desk/bizhi/image/5/2560x1600/1409624254331.jpg', function () { alert('size ready: width=' + this.width + '; height=' + this.height); }); *******************************************************************************************/ var yundanran_imageSize = (function () { var list = [], intervalId = null, // 用来执行队列 tick = function () { var i = 0; for (; i < list.length; i++) { list[i].end ? list.splice(i--, 1) : list[i](); }; !list.length && stop(); }, // 停止所有定时器队列 stop = function () { clearInterval(intervalId); intervalId = null; }; return function (url, ready, load, error) { var onready, width, height, newWidth, newHeight, img = new Image(); img.src = url; // 如果图片被缓存,则直接返回缓存数据 if (img.complete) { ready.call(img); load && load.call(img); return; }; width = img.width; height = img.height; // 加载错误后的事件 img.onerror = function () { error && error.call(img); onready.end = true; img = img.onload = img.onerror = null; }; // 图片尺寸就绪 onready = function () { newWidth = img.width; newHeight = img.height; if (newWidth !== width || newHeight !== height || // 如果图片已经在其他地方加载可使用面积检测 newWidth * newHeight > 1024 ) { ready.call(img); onready.end = true; }; }; onready(); // 完全加载完毕的事件 img.onload = function () { // onload在定时器时间差范围内可能比onready快 // 这里进行检查并保证onready优先执行 !onready.end && onready(); load && load.call(img); // IE gif动画会循环执行onload,置空onload即可 img = img.onload = img.onerror = null; }; // 加入队列中定期执行 if (!onready.end) { list.push(onready); // 无论何时只允许出现一个定时器,减少浏览器性能损耗 if (intervalId === null) intervalId = setInterval(tick, 40); }; }; })();
http://qianduanblog.com/post/js-learning-10-image-reload-size.html
很好的个人博客
http://qianduanblog.com/
http://code.ciaoca.com/
无以言表
莫可名状
又
难以启齿
oh, shit