Nginx开启SSI模块支持shtml

今天需要shtml,测试了下,很简单在nginx.conf 文件的 http{} 段中,以开启 SSI 模块的支持:

ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

重启nginx即可

带点shtml语法

SSI有什么用?

之所以要扯到 SSI,是因爲 Shtml – Server-Parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取、分析以及修改。shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。

目前,主要有以下几种用用途:

  1. 显示服务器端环境变量<#echo>
  2. 将文本内容直接插入到文档中<#include>
  3. 显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
  4. 直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
  5. 设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式)

#echo 示范

作用:将环境变量插入到页面中。

语法:

<!–#echo var=”变量名称”–>

示例:

<!–#echo var=”DOCUMENT_NAME”–> 本文档名称
<!–#echo var=”DATE_LOCAL”–> 现在时间
<!–#echo var=”REMOTE_ADDR”–> 你的IP地址

#include 示范

作用:将文本文件的内容直接插入到文档页面中。

语法:

<!–#include file=”文件名称”–>
<!–#include virtual=”文件名称”–>

file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档,则为file=”nav_head.htm”。
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则为file=”/hoyi/nav_head.htm”

参数:

file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置

注意:

  1. 文件名称必须带有扩展名。
  2. 被包含的文件可以具有任何文件扩展名,我觉得直接使用htm扩展名最方便,微软公司推荐使用 .inc 扩展名(这就看你的爱好了)。

示例:

<!–#include file=”nav_head.htm”–> 将头文件插入到当前页面
<!–#include file=”nav_foot.htm”–> 将尾文件插入到当前页面

发表在 服务器 | 标签为 , | 留下评论

PHP多线程扩展Pthreads只能运行在ts安全线程

本来想测试下,结果无论本地或生产环境都是nts,所以这里只说安装,不说使用,因为没用上。

windows版本的下载地址
http://windows.php.net/downloads/pecl/releases/pthreads/
找个最新版本下载解压:

把pthreadVC2.dll和php_pthreads.dll文件,把vc2文件放到php.exe同级目录,把php_pthreads.dll放到扩展目录下。

1、修改php.ini文件 添加extension=php_pthreads.dll
2、Apache还需要修改配置文件httpd.conf 添加LoadFile “X:/php5/pthreadVC2.dll”
3、重启php服务

 linux版本的下载地址

http://pecl.php.net/package/pthreads

找个最新版本下载解压:

1.解压tar -zxvf pthreads-3.1.6.tgz ;

2.进入源码文件夹 cd pthreads-3.1.6 执行 /usr/local/php/bin/phpize;

3.执行./configure –with-php-config=/usr/local/php/bin/php-config;

4.执行make && make install;

5.编辑/usr/local/php/lib/php.ini加上extension=pthreads.so

6.重启php服务

发表在 服务器 | 标签为 | 留下评论

mysql跨表截取字符串过滤html替换

使用截取sql为:

UPDATE table1,table2 SET table1.description=left(trim(strip_tags(table2.content),180))  where table1.id= table2.id

用到以下函数和自定义strip_tags函数

1、从左开始截取字符串
left(str, length)
说明:left(被截取字段,截取长度)
例:select left(content,200) as abstract from my_content_t
2、从右开始截取字符串
right(str, length)
说明:right(被截取字段,截取长度)
例:select right(content,200) as abstract from my_content_t
3、截取字符串
substring(str, pos)
substring(str, pos, length)
4、trim//左右去空格
5、除去换行符
UPDATE table1 SET description=REPLACE(description,CHAR(13),”);
UPDATE table1 SET description=REPLACE(description,CHAR(10),”);
6、自定义函数用个新版的phpmyadmin添加就可以了,免去用命令行的麻烦。

选择某个数据库然后,点上面的程序-> 添加程序,函数名strip_tags,变量$str,类型和返回值都是text,定义就复制下面红色部分。
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
 DECLARE $start,$end INT DEFAULT 1;
 LOOP
  SET $start = LOCATE(“<“, $str, $start);
  IF (!$start) THEN RETURN $str; END IF;
  SET $end = LOCATE(“>”, $str, $start);
  IF (!$end) THEN SET $end = $start; END IF;
  SET $str = INSERT($str, $start, $end – $start + 1, “”);
  END LOOP;
END;

发表在 服务器 | 标签为 | 留下评论

php编译安装Swoole扩展

安装swoole前必须保证系统已经安装了下列软件

php-5.3.10 或更高版本
gcc-4.4 或更高版本
make
autoconf

下载地址

  • https://github.com/swoole/swoole-src/releases
  • http://pecl.php.net/package/swoole
  • http://git.oschina.net/swoole/swoole

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

这里我选择php官方网站下载安装包,找stable稳定版。

wget http://pecl.php.net/get/swoole-1.9.10.tgz
tar zxvf swoole-1.9.10.tgz
cd swoole-1.9.10
phpize
./configure
make 
sudo make install

PECL

swoole项目已收录到PHP官方扩展库,除了手工下载编译外,还可以通过PHP官方提供的pecl命令,一键下载安装swoole

pecl install swoole

配置php.ini

编译安装成功后,修改php.ini加入

extension=swoole.so

通过php -mphpinfo()来查看是否成功加载了swoole,如果没有可能是php.ini的路径不对,可以使用php -i |grep php.ini来定位到php.ini的绝对路径。

重启php,执行php -m命令看下是不是有该扩展了。

发表在 服务器 | 标签为 , | 留下评论

西联汇款错误U0300 – RECORD NOT LOCKED TO YOUR TERMINAL

今天使用ems邮政google西联汇款的广告费提示境外错误:U0300 – RECORD NOT LOCKED TO YOUR TERMINAL

注意最后两栏国际收支申报信息:

第一栏国际收支交易编码选:321000_职工报酬(工资、薪金和福利)

第二栏国际收支交易附言选:居民从非居民雇主获得的工资收入

呵呵,一定是工资哦,不然系统会报错!唉!

重新尝试的时候提示境外错误:U2313 – MTCN ON HOLD – PLS RETRY AFTER FEW MINUTES “(境外错误:U2313 – 汇款监控号码保留 – 请等几分钟后重试)

出现这个错误是因为第一次没有支取成功,过几分钟再试就可以了。

查看附图

ems邮政收google西联汇款

交易成功提示如图:

ems邮政收google西联汇款

发表在 服务器 | 标签为 , , | 留下评论

select2如何清空选择项

相当于jquery的一个扩展了。

解决方案

$(“#selectID”).select2(“val”, “”);

官方:http://select2.github.io/select2/

发表在 服务器 | 标签为 , | 留下评论

phpcms v9 在通过外部接口导入数据无法加水印

v9外部可以通过模型的add_content函数来添加文章

phpcms\model\content_model.class.php

/**
* 添加内容
*
* @param $datas
* @param $isimport 是否为外部接口导入
*/
public function add_content($data,$isimport = 0) {
}

该函数调用了一下类

caches\caches_model\caches_data\content_input.class.php

此类由以下类文件组合生成,修改以下文件红色部分即可

phpcms\modules\content\fields\content_input.class.php

function __construct($modelid) {
$this->db = pc_base::load_model(‘sitemodel_field_model’);
$this->db_pre = $this->db->db_tablepre;
$this->modelid = $modelid;
$this->fields = getcache(‘model_field_’.$modelid,’model’);
//初始化附件类
pc_base::load_sys_class(‘attachment’,”,0);
 $this->siteid = param::get_cookie(‘siteid’)?param::get_cookie(‘siteid’):1;//初始化的时候由于接口方式是没有登陆,所有就没有cookie了,没有站点id就无法获取是否加水印的配置信息了,给它个默认值1即可。
$this->attachment = new attachment(‘content’,’0′,$this->siteid);
$this->site_config = getcache(‘sitelist’,’commons’);
$this->site_config = $this->site_config[$this->siteid];
}

发表在 服务器 | 标签为 , | 留下评论

php开通阿里云短信服务平台api发送短信的代码

短信服务这个产品已经整合到消息服务MNS中了,您需要使用MNS的sdk来发送短信。
PHP SDK: https://help.aliyun.com/document_detail/51929.html。 另外,如需查询消费记录,您可以登录控制台费用中心查看下具体的使用明细。 费用中心 – 消费记录 – 消费明细,通过下拉菜单选择“消息服务”产品,筛选时间进行查询。 在列表中点击“详情”进行查看,在详情页点击箭头可以查看到具体的使用量以及对应产生的费用。

  • 下载最新版php sdk

  • MNS PHP SDK

    建议下载最新发布的SDK版本以获得最佳性能和稳定性。

  • Version 1.3.3
  • 更新日期 2016-12-15 http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32381/cn_zh/1481792159495/aliyun-mns-php-sdk-1.3.3.zip
  • 配置AccessKeyID、AccessKeySecret和Endpoint;
    • AccessKeyId、AccessKeySecret
      • 访问阿里云API的密钥对;
      • 如果使用主账号访问,登陆阿里云 AccessKey 管理页面创建、查看;//根据提示创建一个
      • 如果使用子账号访问,请登录阿里云访问控制控制台查看;
    • Endpoint
      • 访问MNS的接入地址,登陆MNS控制台 单击右上角 获取Endpoint 查看;//这很重要,记得要选择对应的地区 不然最终无法调用,我就犯错,测试了半天
      • 不同地域的接入地址不同;
<?php
//echo dirname(dirname(dirname(__FILE__)));exit;
require_once(dirname(__FILE__).'/mns-autoloader.php');
use AliyunMNS\Client;
use AliyunMNS\Topic;
use AliyunMNS\Constants;
use AliyunMNS\Model\MailAttributes;
use AliyunMNS\Model\SmsAttributes;
use AliyunMNS\Model\BatchSmsAttributes;
use AliyunMNS\Model\MessageAttributes;
use AliyunMNS\Exception\MnsException;
use AliyunMNS\Requests\PublishMessageRequest;
class PublishBatchSMSMessageDemo
{
    public function run()
    {
        /**
         * Step 1. init client
         */
        $this->endPoint = "xxx"; // 记得对应的机房 eg. http://1234567890123456.mns.cn-hangzhou.aliyuncs.com
        $this->accessId = "xxx";
        $this->accessKey = "xxx";
        $this->client = new Client($this->endPoint, $this->accessId, $this->accessKey);
        /**
         * Step 2. get topic reference
         */
        $topicName = "sms.topic-cn-hangzhou";//如自己没有创建 就用默认的 面板上可以查到
        $topic = $this->client->getTopicRef($topicName);
        /**
         * Step 3. generate SMS message attributes
         */
        // 3.1 set SMS message sign name and template code
        $batchSmsAttributes = new BatchSmsAttributes("已经创建好短信签名", "短信模板ID");
        // 3.2 [if has param defined in SMS message template] set SMS message receiver param
        $batchSmsAttributes->addReceiver("要发送的手机号码13988888888", array("code" => "123","product" => "五一","item" => "团购"));//模板里面的标签解析
        //$batchSmsAttributes->addReceiver("YourReceiverPhoneNumber2", array("YourSMSTemplateParamKey1" => "value1"));
        $messageAttributes = new MessageAttributes(array($batchSmsAttributes));
        /**
         * Step 4. set SMS message body ( required )
         */
         $messageBody = "smsmessage";
        /**
         * Step 5. publish SMS message
         */
        $request = new PublishMessageRequest($messageBody, $messageAttributes);
        try
        {
            $res = $topic->publishMessage($request);
            echo $res->isSucceed();
            echo "\n";
            echo $res->getMessageId();
            echo "\n";
        }
        catch (MnsException $e)
        {
            echo $e;
            echo "\n";
        }
    }
}
$instance = new PublishBatchSMSMessageDemo();
$instance->run();
?>

根据错误码解决问题:https://help.aliyun.com/document_detail/27501.html

发表在 服务器 | 标签为 , | 留下评论

PHP运行时强行显示错误信息

有时候php有错误却又不显示,这时候可以尝试以下方法

在你觉得有问题的代码上方加入以下代码

ini_set(‘display_errors’,1);            //错误信息
ini_set(‘display_startup_errors’,1);    //php启动错误信息
error_reporting(-1);                    //打印出所有的 错误信息
//直接屏幕输出错误信息
————————————————–
如果还是不现实,尝试输出到文件就加这一句
ini_set(‘error_log’, dirname(__FILE__) . ‘/error_log.txt’); //将出错信息输出到一个文本文件

发表在 服务器 | 标签为 | 留下评论

mysql还原导入出错ERROR: Unknown command ‘\\’.

mysql使用source导入备份文件,但导入中出错,出现:ERROR at line 1418: Unknown command ‘\n’.

这种情况一般是字符集不对应引起的,如果数据库是utf8编码,则
        mysql导入的时
        mysql -uroot -ppasswd <d:\db_name.sql–default-character-set=utf8
        同样如果数据库是gbk,则导入时
        mysql -uroot -ppasswd <d:\db_name.sql–default-character-set=gbk

我是通过phpmyadmin查看原来数据库编码latin1比较特殊

对应编码就能导入成功了

发表在 服务器 | 标签为 | 留下评论