file_get_contents与curl函数的用法

有些主机服务商把php的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl。下面是file_get_contents和curl两个函数同样功能的不同写法

file_get_contents函数的使用示例:

<?php

$file_contents = file_get_contents(‘http://lxy.me/’);
echo $file_contents;

?>

换成curl函数的使用示例:

<?php

$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, ‘http://lxy.me’);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?>

利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数:

<?php

function vita_get_url_content($url) {
if(function_exists(‘file_get_contents’)) {
$file_contents = file_get_contents($url);
} else {
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
return $file_contents;
}
?>

发送邮件出现Could not connect to SMTP host的解决办法

发送邮件出现“不能连接SMTP服务器.”(Error: Could not connect to SMTP host)的原因是fsockopen()被禁用。
如果服务器禁用了fsockopen()函数就会导致PHPmailer连接远程SMTP服务器就会出现上述错误。
下面给出解决方法:
如果是自己的服务器,请直接编辑php.ini在disable_function中找到fsockopen并删除,重启php试试吧。
如果无法更改php.ini,请用pfsockopen()函数直接替换掉 fsockopen()
如果pfsockopen函数被禁用的话,换其他可以操作Socket函数来代替, 如stream_socket_client()
在linux上如果开启了selinux也有可能导致  fsockopen()函数无法使用。

swfupload上传无session的解决方法

swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id

实例化上传插件的时候:

post_params: {“PHPSESSID”: “<?php echo session_id(); ?>”}//注意要先session_start();

php文件中

if (isset($_POST[“PHPSESSID”])) {
session_id($_POST[“PHPSESSID”]);
}

yii框架中的处理方式,是在入口或者在公用的控制器中添加以下代码:

if(isset($_POST[‘PHPSESSID’]))
$_COOKIE[‘PHPSESSID’] = $_POST[‘PHPSESSID’];

yii前台与后台不同步退出的方法

public function actionLogout()
{
Yii::app()->user->logout(false);//退出的时候只需要将logout中的参数设置为false即可;
$this->redirect(Yii::app()->homeUrl);
}

yii通过模型验证时指定场景的2种方式

在模型中需要通过验证规则的on参数指定此条验证规则在什么场景中适用,如:

array(‘email’, ‘email’,’on’=>array(‘register’,’forget’),’message’=>’请输入正确的电子邮件’),
array(‘email’, ‘required’,’on’=>’register’,’message’=>'{attribute}不能为空’),

以user模型为例:

1、$model = new User(‘register’); //指定在注册场景

2、$model = new User();

$model->scenario=’register';//通过属性指定

yii配置语言包

1、将framework下message目录下的config.php复制到应用程序的message目录下。如:

cp yii/framework/message/config.php test/protected/message/config.php
2、修改config.php文件,如需要需要英语
<?phpcd test/protected
./yiic message “../protected/messages/config.php”
/**
* This is the configuration for generating message translations
* for the Yii framework. It is used by the ‘yiic message’ command.
*/
return array(
‘sourcePath’=>dirname(__FILE__).DIRECTORY_SEPARATOR.’..’,
‘messagePath’=>dirname(__FILE__).DIRECTORY_SEPARATOR.’..’.DIRECTORY_SEPARATOR.’messages’,
‘languages’=>array(‘es’),
‘fileTypes’=>array(‘php’),
‘exclude’=>array(
‘.svn’,
‘yiilite.php’,
‘yiit.php’,
‘/i18n/data’,
‘/messages’,
‘/vendors’,
‘/web/js’,
),
);
3、使用yii message将抓取语言包
cd test/protected
./yiic message “../protected/messages/config.php”
4、main.php中配置
‘language’ => ‘zh_cn’,