TypeScript Error TS2304: Cannot find name ‘require’的解决方法

最近在研究ionic framework,在编译项目的时候出现一个报错:

TS2304: Cannot find name 'require'

原因是我们使用了ECharts,在引用它的使用写了这样的一句代码:

// 引入 ECharts 主模块
var echarts = require('echarts/lib/echarts');

require是在ES5的语法里常用的方式,现在我们写typescript了,没有这个玩意儿怎么办?
我找了很久,在github上找到了一个项目:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/requirejs/require.d.ts
把项目里的require.d.ts放到ionic的app目录下就解决了这个报错。

TypeScript Error TS2304: Cannot find name ‘Set’、’Promise’、’Map’.解决方法

最近在研究ionic framework,希望使用hybrid app开发我们团队的新版app报表模块。

在使用命令:

ionic serve

启动应用的时候,发现www/build目录下没有app.bundle.js这个文件,这个文件是typescript编译之后生成的一个js文件。看了命令行启动日志,发现有大量的typescript编译报错,以下就展示部分典型报错信息:

TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/directives/ng_class.d.ts(81,35): Error TS2304: Cannot find name 'Set'.
TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/facade/async.d.ts(34,33): Error TS2304: Cannot find name 'Promise'.
TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/facade/lang.d.ts(11,17): Error TS2304: Cannot find name 'Map'.

经过stackoverflow和github的指点,我找到的解决方法如下:
先安装angular2依赖,–save-dev目的是把angular2依赖写入到package.json里:

npm install angular2 --save-dev

然后在项目的app目录下找到app.ts文件,在文件顶部加上:

///<reference path="../node_modules/angular2/typings/browser.d.ts"/>

这样之后就解决了typescript报错的问题。

httpd: Syntax error on line 57 of /etc/httpd/httpd.conf: Can

在完成PHP的安装之后,输入/usr/local/apache2/bin/apachectl stop之后出现了如下报错:

httpd: Syntax error on line 57 of /etc/httpd/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied

 
尽管系统提示在httpd.conf文件中某一行出了问题,但其实这不是httpd.conf文件的语法错误。其实这个问题是在操作系统被安装的时候选择的SELinux安全设置,为了解决这个问题,使得PHP安装成功,下面我们只要输入:
setenforce 0
这样之后就可以解决我们遇到的这个问题了。

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=863

libtool: install: error: cannot install `libaprutil-1.la’ to

今天在编译安装LAMP环境,到后来感觉之前自己安装的Apache出错了,打算重新安装一次,之前使用的配置语句是:
./configure \
–prefix=/usr/local/apache2/ \
–sysconfdir=/etc/httpd \
–with-z \
–with-included-apr \
–disable-userdir \
–enable-so \
–enable-deflate=shared \
–enable-expires=shared \
–enable-rewrite=shared \
–enable-rewrite=shared \
–enable-static-support
 
高亮显示的第一句句话是我用tab键自动显示出来的,第二句是我不小心多写了,导致在编译安装PHP的时候出现了无法识别一些文件的问题,所以我这次就改了配置语句:
./configure \
–prefix=/usr/local/apache2 \
–sysconfdir=/etc/httpd \
–with-z \
–with-included-apr \
–disable-userdir \
–enable-so \
–enable-deflate=shared \
–enable-expires=shared \
–enable-rewrite=shared \
–enable-static-support

 
后来在重新安装的过程中出现了下面这个报错:

libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending in /usr/local/apache2//lib

 
发现apache2后面居然是两个/,经过多次实验之后,我找到了解决方法:执行make clean后,重新编译安装,或者删除source code目录,重新解压apache安装包,进行编译安装。感觉后者比较保险点,这样就可以解决上面的问题了。

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=861

PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法

今天在工作的时候,在转化了字符串的编码格式(详见:http://www.tonitech.com/?p=822)之后,使用unserialize函数将数据储存到数据库的时候遇到了这个报错,后来发现是将gb2312转换成utf-8格式之后,每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问题,所以需要使用正则表达式将序列化的数组中的表示字符长度的值重新计算一遍,代码如下:

function mb_unserialize($serial_str) {
    $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str );
    return unserialize($out);
}