重用一个CURL句柄时, 发现curl_setopt($ch, CURLOPT_HTTPGET, TRUE) 不起作用. 期望在调用这条语句之后发起请求, 应该发送的是GET, 但看服务器log, 却使用了和前一次请求相同的HTTP方法.
PHP脚本:
<?php
$url = 'http://www.ideawu.net/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_exec($ch);
curl_setopt($ch, CURLOPT_HTTPGET, true); // 错误! BUG
curl_exec($ch);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); // 正确
curl_exec($ch);
?>
web server log:
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net
124.127.130.50 "2011-10-12 18:55:09" "GET / HTTP/1.1" 200 3516 "-" www.ideawu.net
这个BUG目前还没找到相关的资料.
补充: 不仅仅是CURLOPT_HTTPGET, CURLOPT_POST也有同样的问题. 所以, 结论是: 只有CURLOPT_CUSTOMREQUEST才是正确的方法.
Written by ideawu
at 2011-10-12 18:55:51
你可能会觉得PHP中将浮点数(float)转成字符串非常简单, 但是, 常用的方法隐藏着严重的bug. 因为, PHP在处理浮点数时有非常不合理的做法, 会有精度丢失. 经研究, 其实是PHP在显示浮点数时的问题, 也可以说是BUG. PHP内置的echo, var_dump, json_encode, 字符串拼接等函数(指令)在显示浮点数时都有问题, 导致精度丢失.
<?php
$a = 1315537636.338467;
printf("%f", $a); echo "\n";
echo $a . "\n";
echo $a; echo "\n";
结果
1315537636.338467
1315537636.3385
1315537636.3385
也就是说, 用PHP最顺手的方法将浮点数转成字符串或者显示是不行的, 必须使用printf/sprintf将浮点数转成字符串.
Written by ideawu
at 2011-09-09 11:33:47

注: 只要你会做了这道题目, 你的能力已经可以进入百度了! 如果别的部门不要你, 请你给我发邮件, 我一定尽我所能强烈推荐你! 如果你不想加入百度, 而别的公司又不要你, 只能说明那家公司瞎眼了.
题目: 见图片, 该图是某网页的一个区域的截图, 用于显示商品或者其它信息的分类. 该分类的每一项可以折叠和收起(展开和收缩, 如果有子分类的话). 分类的级数不固定. 现有一个PHP变量:
$cats = array(
array(
'id' => 1,
'name' => '学术和教育',
'children' => array(
array(
'id' => 2,
'name' => '自然科学',
'children' => null,
),
// ...
),
),
// ...
);
请写一段PHP代码, 将该数组所包含的分类数据生成一段能实现如图片所示功能的HTML/JavaScript代码, 可不考虑CSS样式.
———-
注解: 这道题目考察的范围非常广, 包括PHP, HTML, JavaScript, CSS, 递归, 只有真正掌握了如上几种全部技能, 才能实现完整的功能, 否则必须依赖分工. 应聘者所能实现的程度越大, 得分就越高.
如果应聘者的应聘职位不包括HTML/JS/CSS, 那么题目可改为: 把上面的PHP数据用缩进换行文本的形式保存到文件, 并读取文件生成一个同样的PHP数组.(自定义格式的序列化和反序列化)
看到这篇日志的读者, 如果已经做了出来, 并且个人想加入百度, 请在评论中回复URL并说明你的意愿, 我会主动联系你. 或者你可以把程序打包发给我.
Continue reading »
Written by ideawu
at 2011-03-31 16:57:24 | tags: 程序员
PHP是一种类C语言语法的脚本语言, 但它有一些和C语言甚至是常见编程语言不一致的地方, 也就是PHP不符合常理的地方. 比如continue指令就是一个鲜活的例子.
简单地把continue用在for循环中, 那么, PHP的continue和C语言的continue一样, 都是在直接跳到下一个循环, 忽略后面的代码的执行. 不过, 如果循环中包含了一个switch语句, 并且continue是放在switch里的, 那么意思就大不相同了!
请看下面的例子:
Continue reading »
Written by ideawu
at 2011-03-01 13:52:12
这篇文章主要是从原理, 手册和源码分析在PHP中查询MySQL返回大量结果时, 内存占用的问题, 同时对使用MySQL C API也有涉及.
昨天, 有同事在PHP讨论群里提到, 他做的一个项目由于MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用. 所以, 他问, 在执行下面的代码遍历返回的MySQL结果之前, 数据是否已经在内存中了? -
while ($row = mysql_fetch_assoc($result)) {
// ...
}
Continue reading »
Written by ideawu
at 2011-02-24 10:34:12
把这段代码放到 theme 里的 functions.php 文件:
function theme_pre_comment_post( $c) {
$c['comment_content'] = htmlspecialchars($c['comment_content']);
return $c;
}
add_filter( 'preprocess_comment', 'theme_pre_comment_post', '', 1);
Written by ideawu
at 2010-06-22 13:54:47 | tags: WordPress
|
|
Recent Comments