PHP: 使用定界符<<<处理字符串

Categories: PHP; Tagged with: ; @ July 19th, 2010 14:33

定界符
另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。

有时不得不从PHP中挑出来以打印大批的HTML代码, 但会破坏代码可读性, 此时可以使用定界符进行打印:

print <<
但要求首行必须顶格写, 且结束行';'后无内容. 可以有效降低对代码可读性的破坏.
H;

WordPress的setup_postdata($post)与PartialObject

Categories: Development NotesWordPress; Tagged with: ; @ July 18th, 2010 0:33

如果谈绿色, 谈低碳, 那我们公司做的, 那叫一个环保集约, 举例来说: 几乎所有的数据load, 都是lazy的(PartialObject). 譬如:

你要显示一个新闻列表, 那数据库发来得只有连接给标题, 没有内容啊 附件啊, 等你要打开显示详情了, 再去load. 出于这么一个环保节约的理念, 今天在研究Wordpress文档时惊讶的发现, 哇, wp也很环保呀, 试看:

Some post-related data is not available to get_posts by default, such as post content through the_content(), or the numeric ID. This is resolved by calling an internal function setup_postdata(), with the $post array as its argument.

我们天真的以为wp也很环保啊, 我英文也不球行, 以为是lazy的, 于是在只想做个新闻列表的时候不想load content. 但是来回翻了几遍代码, 发现没有处理PartialObject的地方!

我们老板比较熟悉PHP, 在qury.php中发现了猫腻, 加了个debug打印, 抓图奉上:

image 

请看仔细: 是Select wp_posts.*, 也就是说, 虽然只想打印一个Recent Posts, 但从数据库load的时候, 你会load他的标题, 作者, 时间, 内容(MySql类型为: longtext) — 当然这只是从数据库load到服务器, 并不一定直接表现在网页上, 但在如果流量极大的情况下, 如此频繁并剧烈的Select, 相比会大大延缓速度.

如果wp一直这样load数据, 那必须得用cache了.

也就是说, 数据是一次load全部的, setup_postdata($post)只是设定值,而不是读取完整的对象,

对于get_posts()后, 取得post Attribute的方法:

文档中要求:

1。 要使用形如get_the_ID(), get_the_title()等方法, 需要先进行setup_postdata($post)

2。 或者直接使用形如: $post->ID, (注意Column名要写对)

从此处推理或从代码中搜索亦可印证: setup_postdata($post)作用只是对数据库读取的值进行处理,以便使用get_the_ID()等方式直接获取Attribute.

 

对于普通用户来讲:

用越多的Recent, Related, Random的Post会成倍增加SELECT的数量与对数据库的压力(当然, 前提是你博客流浪巨大的情况下, 如果只是跟本站一般低迷, 就不需要考虑这么多了)

 

废话一句: qury.php里的method好长啊

在外部使用WordPress API

Categories: Development NotesWordPress; Tagged with: ; @ July 17th, 2010 23:35

用Wordpress这么久了, 从没看过文档也没用过API. 近期有如此需求, 譬如说我站内已有一个网站, 另有一个Wordpress, 两个都在一个主机上, 我希望在WordPress之外使用其API, 显示文章列表啊什么的.

发现有如下之参考: see: http://www.webopius.com/content/139/using-the-wordpress-api-from-pages-outside-of-wordpress

在php文档一开头就声明:

<?php define('WP_USE_THEMES', false); ?>
<?php require('wp-blog-header.php');?>

此后, WordPress API可用.

的确可用.

但今天在讨论Wordpress读取post的SQL时对qury进行了debug, 发现, 只要include/require了 wp-blog-heard.php就会立马辗转Call一下Classes.query_posts(), 先查询10个post再说.

分析后发现不可引用wp-blog-heard.php, 转而引用:wp-load.php就够.

因此, 如果需要在站外使用API, php声明:

define('WP_USE_THEMES', false);
require 'C:\xampp\htdocs\wp\wp-load.php'; // instead of wp-blog-header.php

PHP Mail()发送邮件乱码解决方案

Categories: PHP; Tagged with: ; @ July 16th, 2010 22:30

网上有很多Mail()乱码的解决方案, 但试了几个都不. 彻底的解决方法是重写php.ini中的代码设置: 将以下代码加到mail()前:

/**
 * Solve the email problem.
 */
ini_set("mbstring.language", "Neutral");
ini_set("mbstring.internal_encoding", "UTF-8");
ini_set("mbstring.http_input", "UTF-8");
ini_set("mbstring.http_output", "UTF-8");
ini_set("mbstring.encoding_translation", "On");
ini_set("mbstring.detect_order", "auto");
ini_set("mbstring.substitute_character", "long");

Linux部分常用命令小结

Categories: Linux; Tagged with: ; @ May 3rd, 2010 21:39

初学.

处理文件

  1. 查看当前目录详情: pwd, ls -l
  2. 创建新目录: mkdir gl / mkdir /gl/copy
  3. 切换目录: cd gl
  4. 创建文件: touch gl/test.text
  5. 查找文件: locate
  6. 复制文件: cp -i test.text /gl/copy/ – 如果已存在, 会提示是否覆盖
    cp – il test.text /gl/copy/ 建立硬链接
    cp -a /gl/copy/ /gl/copy2/ – (如果copy2不存在会先创建)将copy下的所有文件复制到copy2中
    保留所有权及全线设定
    cp – R 将所有权分配给当前用户, 并添加当前日期和时间戳
    dd if=/dev/zero of=/gl/copy2/ddtest.html count=1 从zero(产生空白字符)复制1个单位(默认大小为512k)到ddtest.html中(如果不存在, 会先创建)
  7. 删除文件 rm index.html
    删除目录 rm -rf copy2

处理文本

  1. 使用vi 打开文本: vi test.text
    按i进入Insert状态, Esc, : + quit 退出

打包

  1. 打包: tar cvf test.tar *.te* – 打包.te* 的文件到test.tar
  2. 解包:tar xvf test.tar
  3. 查看归档内容: tar tvf copy.tar
  4. 合并tar: tar -Af copy.tar go.tar – 将go.tar合并到copy.tar中
  5. 追加tar内容: tar rfv copy.tar test2.tex – 将text2.tex追加到copy.tar中
  6. 从tar中移除指定文件: tar –delete test2.tex -f copy.tar 从copy.tar中移除text2.tex

压缩:

  1. 打包并使用bzip2压缩: tar cjvf test.tar.bz2 *.tex* – 将目录下的 *.tex* 打包到test.tar.bz2
    解压缩; tar xjvf test.tar.baz2
  2. Gzip压缩: 文件: gzip -v test.text – 压缩为test.text.gz 源文件被替换
    目录: gzip -rv copy 会压缩copy目录下所有的文件
    Gzip解压: gunzip
  3. Bzip2
  4. Lzop 注重压缩速度而非压缩比, .lzo后缀, 源文件保持不变(使用-u除外)

Newer Posts <-> Older Posts



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.