Cannot modify header information – headers already sent by

 

 

前几天Godaddy里布署应用,出现“Cannot modify header information – headers already sent by”错误,参照下文可以解决:

http://www.wuleilei.net/808.html

发现配置的php版本为5.x版本,所以配置文件php.ini必须更改为 php5.ini

output_buffering = 4096

PHP元编程

1

<?php
class _Meta_Base {
		function __call($method, $arg_array) {
				echo $method . "<br />";
		}

		function doCallable() {
				$this->doCallBefore();
				$this->doCaller();
				$this->doCallAfter();
		}
}

class MetaClass extends _Meta_Base {
	function doSomething() {
		echo parent::doSomething();
	}

	function doCaller() {
			echo "A good solution for PHP meta programming<br />";
	}
}

$mc = new MetaClass();

$mc->doSomething();
$mc->doNothing();
$mc->doCallable();
?>

2

执行结果

$ php meta-test.php
doSomething
doNothing
doCallBefore
A good solution for PHP meta programming
doCallAfter

关于php快速应用多个函数

前几天偶然看到好象是@yegle发的一个关于PHP应用多个函数的文章:由Karthik Viswanathan的How to Quickly Apply Many PHP Functions。其中提到了一个采用字符串分隔执行多个函数的方法,最后简化成的精华如下:

function apply( &$var, $list ) {
	$functions = split( '\|', $list );

	foreach( $functions as $change ) {
		$var = $change( $var );
	}
}

这样调用就可以写成:

$str = "      heLLO HoW ARE you?        ";
apply( $str, 'trim|strtolower|ucwords|strip_tags' );

echo "'" . $str . "'";

执行结果:

'Hello How Are You?'
Function 'apply' costs 0.071048736572266ms

个人非常不习惯这种方式。
更习惯采用类似于jQuery的方式,就是类似于$strObj->trim()->strtolower()->ucwords()->strip_tags()。

版本一:

class StrApply0 {
	var $str = '';

	function __construct($s) {
		$this->str = $s;
	}

	function trim() {
		$this->str = trim($this->str);
		return $this;
	}

	function strtolower() {
		$this->str = strtolower($this->str);
		return $this;
	}

	function ucwords() {
		$this->str = ucwords($this->str);
		return $this;
	}

	function strip_tags() {
		$this->str = strip_tags($this->str);
		return $this;
	}

	function toString() {
		return $this->str;
	}
}

与函数方式比较的执行效果:

'Hello How Are You?'
Function 'apply' costs 0.063896179199219ms
'Hello How Are You?'
Class 'apply' costs 0.014066696166992ms

可以看出,性能方面还是具有一定优势的。
继续阅读“关于php快速应用多个函数”

解读,Yupoo使用的软件

今早发现有人推荐了这个,Yupoo使用的软件,对成熟解决方案的学习一直是我的一个爱好。做为国内图片托管的历史比较长的公司,虽然我从来没有使用过,但是名声还是经常耳闻的。

TAG云中果然好多软件!壮观:

Apache AWStats bottle CentOS Cacti cURL Debian Erlang Firebug google-perftools gevent Hadoop Heartbeat ImageMagick IPVS imagick ibrowse Java lighttpd Lua libmemcached libevent MySQL mochiweb Memcached MySQLdb Mogilefs Mercurial Mootools MacOSX Nginx Nagios NTP Net-SNMP OpenVPN PHP Python Predis php-amqp pylibmc php-memcached Postfix Redis Riak RabbitMQ Redmine Readline Solr Squid Twisted Ubuntu VIM vsftpd XCache Xdebug

继续阅读“解读,Yupoo使用的软件”

开发组件:php-mobile-detect

现在移动设备的能力越来越强大。对于小型网站检测移动设备可以试试这个PHP组件。

这个组件包括了一个名为Mobile_Detect的类,可以检测:Android, BlackBerry, Opera Mini, Palm, Windows Mobile等移动设备平台。

用法很简单:
[code language=”php”]
include(“Mobile_Detect.php”);
$detect = new Mobile_Detect();

if ($detect->isAndroid()) {
// code to run for the Google Android platform
}
[/code]
其它的方法包括:
isAndroid(), isBlackberry(), isOpera(), isPalm(), isWindows(), isGeneric()等。如果你不是专注于某一个特定的平台,也可以采用下面的方法检测是否是移动设备平台:
[code language=”php”]
if ($detect->isMobile()) {
// any mobile platform
}
[/code]

同时,PHP的学习者也可以通过这个小巧的组件学习到PHP中如何定义类,并且采用__call内置类来实现动态函数名的。

php-mobile-detect

转发:WordPress(WP)博客日志同步到QQ空间(Qzone)的方法

众所周知,QQ 的服务是不会有 API 的,但是如何同步到 Qzone 呢?这里的过程有点曲折,由于 Qzone 支持通过你的 QQ 邮箱发布,而 QQ 邮箱有支持 SMTP 协议,而 WordPress 所包含的 PHPMailer 类可以使用 SMTP 发邮件,所以我们可以通过使用 PHPMailer 同步 WordPress 博客日志到 Qzone。
首先我们可以通过下面的函数登录 QQ 邮箱并给 Qzone 发邮件(你需要首先打开 QQ 邮箱的 SMTP 功能)。
下载wp2qzone插件
使用方法:
打开 QQ 邮箱的 SMTP 功能。
下载同步到 Qzone 插件:WP2Qzone。
上传到 wp2qzone.php 插件到plugins目录中并激活。
把插件中的 $qq_number 和 $qq_password 设置成你的 QQ 号码和密码。
[code language=”php”]
function smtp_mailer_qqmail($subject,$body){
$qq_number = ”;
$qq_password = ”;
[/code]
这样只要你一发布日志就会自动更新到 Qzone 中。

来源:http://www.qed.cn/?p=613#_