Yii框架常见问题

Yii的MVC基础知识

basic版非常清晰,分别位于controllers, models, views文件夹下

controllers下的文件通常心Controller结尾,如IndexController.php, 需访问通常在类中添加actionXxx方法,如需通过?r=index/index方法,在IndexController类中添加actionIndex方法

models下的文件名通常与数据表名称一致

views下的目录名通常与控制器一致

1.Database Exception – yii\db\Exception

SQLSTATE[HY000] [2002] No such file or directory

本地开发时如出现这一错误,请尝试将config/db.php中的mysql:host= localhost修改成mysql:host=127.0.0.1

 

2.如何去除顶部默认的导航条?

Yii Layout

// 方法一:在controller中加入
$this->layout = false; // 在类中加入可作用下其它的所有方法
// 方法二:将return $this->render('index')替换为如下代码
return $this->renderPartial('index');

3.No such file or directory in vendor/yiisoft/yii2/db/Connection.php at line 603

请检查common/config/main-local.php中配置文件host是否为localhost并尝试修改127.0.0.1进行连接

Mac OS系统常见问题

Mac登录微信秒退

打开命令行,执行

rm -rf ~/Library/Containers/com.tencent.xinWeChat/

Wireshark – you don’t have permission to capture on that device mac

sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark

Mac Terminal终端ssh登录LC_CTYPE报错

我们使用Mac的Terminal SSH登录Linux主机时发现如下报错

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

进一步输入locale指令会出现如下报错

[root@hadoop02 ~]# locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

解决方法

点击Terminal>Preferences>Profiles>Advanced取消勾选Set locale environment variables on startup返回即可

设置Terminal首选项

软件无法安装问题

在Mac的系统中安装软件,有时会出现如下报错:

“xxx” is damaged and can’t be opened. You should move it to the Trash.(打不开”xxx”, 因为它来自身份不明的开发者)

这通常是由于软件并非来自App Store,解决的方法是点击下方Dock中或左上方苹果图标下拉中的System Preferences(系统偏好设置),在接下的界面中双击Security & Privacy(安全性与隐私),然后点击左下角的小锁输入密码进行解锁并选择Anywhere(任何来源)以允许来自任何来源的软件进行安装。

Mac OS系统偏好设置

Unrecognized archive format

在执行tar xzvf ***.tar.gz指令时出现如下报错:

tar: Unrecognized archive format

tar: Error exit delayed from previous errors.

这通常是由于文件本身不完整造成的,所以请尝试重新下载文件。也可以试着分步进行解压,即:

gunzip ***.tar.gz

tar xvf ***.tar

SecureCRT相关

Mac原生的Terminal使用起来并不是很方便,这里推荐一款跨平台的软件SecureCRT。安装后发现无法保存密码:

从菜单栏点击Preferences(快捷键Cmd+,)进入Global Options界面,然后取消勾选Use Keychain并保存

SecureCRT Global Options页面

上传下载:安装sz/rz-> yum -y install lrzsz,安装完成后执行rz命令可进行上传,sz命令可进这行下载。

Mac移动硬盘无法写入、创建文件夹或删除

安装一款小软件Mounty,打开软件再次插入移动硬盘则会提示确定是否以读写的方式装载移动硬盘

Mounty移动硬盘写入

下载地址:http://pan.baidu.com/s/1gd7VkHX

Mac远程连接Windows机器

去微软官网下载软件:http://www.microsoft.com/zh-CN/download/details.aspx?id=18140

然后安装该软件,打开即可实现对Windows系统机器的连接:

Mac远程Windows机器

Odoo 安装相关

1.Postgresql连接报错

psql: could not connect to server: No such file or directory

Is the server running locally and accepting

connections on Unix domain socket “/tmp/.s.PGSQL.5432”?

解决方法:删除/usr/local/var/postgres/postmaster.pid

2. Wkhtmltopdf

下载地址:https://wkhtmltopdf.org/downloads.html

3. ERROR odoo odoo.addons.base.ir.ir_qweb.assetsbundle: Could not execute command ‘lessc’

新手小技巧

Mac终端无法显示中文

首选项里选择UTF-8,然后在终端中使用ls -w即可

输入中文文本可以用

luit -encoding 'gb2312' vi test

显示或隐藏文件

如何在Mac上显示隐藏文件?

输入快捷键 Cmd+Shift+.

Windows发送来的文件解压缩文件名乱码

这个确实很让人抓狂,身边很多同事使用的都是Windows系统,打包的zip文件发送过来后双击解压会发现文件名称都显示乱码。解决方法是在App Store中搜索the unarchiver,安装完成以后在打开zip文件时选择the unarchiver就不会再出现乱码问题了。想要一劳逸的话就右击Get info在Open With下拉框中选择该软件并保存即可。

Command+Option+R+P键

关于Mac的解决方案中可能这个组合键出现的机率是最高的了,在开机时按下这几个键直到再次听到启动声音(F10开以开启或关闭声音),据说可以重置PRAM/NVRAM,相当于Windows中的BIOS设置。

如何关闭Mac的键盘灯?

Mac的键盘灯可以通过F5和F6来调节键盘灯的亮度,所以想要关闭键盘灯的话只需要按F5直到进度条上的竖线都消失即可。

Mac中如何进行划词翻译?

在Windows我们常安装有道等软件来实现划词翻译,而实际上Mac上内置了这一功能,只需在选中单词后按下Ctrl+Cmd+D快捷键组合。

清楚垃圾文件

 

Mac系统中如何截屏?

我们都知道在Windows中可以通过Print Screen按键来进行截屏,Mac中当然也有同样的内置的功能。通过Cmd+Shift+3可以进行整个屏幕的截屏,Cmd+Shift+4可以进行部分截屏,在进行区域截屏时还可以按下空格键来调整起始位置。

如何在Mac上实现显示桌面的功能?

我们都知道在Windows系统中可以按下快捷键Win+D来显示桌面,而Mac与之相对应的是Fn+F11。

Mac上删除文件的快捷键是什么?

在Windows可以通过Delete来直接删除文件(文件会被放到回收站中),Shift+Delete来永久删除文件。Mac中的Delete键并不像你以为的那样可以删除选中的文件,它是通过Cmd+Delete来实现的,如果同时按下Cmd+Shift+Delete按钮,则会清空垃圾箱中的内容。

如何在Mac上实现Home和End的功能?

在Windows系统中我们可以按下Home或End键移动到行首或行尾,Mac OS中相对应的快捷键是Cmd+左方向键和Cmd+右方向键

如何在Mac上配置host文件

Mac系统上的host文件配置地址在/private/etc/hosts中进行,在Terminal中操作时要求切换到root用户(sudo su)

如何在Mac上播放wmv等格式文件?

可通过安装VLC media player等软件来实现对Windows上视频格式的支持

VLC media player

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

相关文章

Mac上zip文件解压出现cpgz格式解决方法

Mac系统Eclipse快捷键大全

Mac系统MySQL数据库无法启动

百度工具常见问题

百度统计中如何排除自己的IP?

公司内部人员经常访问网站,这会使得数据出现虚高,同时也无法判断CTR等数据的真实性。百度统计实际上在网站中心下提供了排除指定IP、排除来源网站域名、排除受访网站域名、跨域监控、设置转化等一系列功能。进入百度统计,点击网站中心在统计规则设置导航下的排除IP地址中进行设置即可:

百度统计排除IP

注:百度统计中会提示当前IP,另外想要单独获取当前IP可在百度中直接搜索ip或访问whatismyip.com等站点。

百度搜索图片缩略图:图片比例最好尽量符合121:75

SEO百度推荐做法

1.添加ETag

方法:在.htaccess中添加一行内容

FileETag MTime Size

详细解释:http://zhanzhang.baidu.com/college/articleinfo?id=457?edm1001

 

Excel常见问题

此文档中包含宏…
Excel表格如何另存为图片?
如何查询或替换Excel中的?和*

此文档中包含宏…

在保存Excel文件时,有时会出现如下警告弹窗:

隐私问题警告,此文档中包含宏、ActiveX 插件、XML 扩展包信息或 Web 组件, 其中可能包含个人信息,并且这些信息不对过”文档检查器“进行删除。
excel此文档中包含宏...

解决方法(Excel 2007后版本): 文件 > 选项 > 信任中心 > 信任中心设置 > 个人信息选项,去除”保存时从文件属性中删除个人信息”前面的勾选,然后点确定保存即可。

保存时从文件属性中删除个人信息

Excel表格如何另存为图片?

在日常工作中有时方便同事或他人查阅,需要将Excel转换成图片格式,这时可以借助于截图软件,但很多大型数据表格在一屏内是无法显示完全的,这时又该怎么办呢?

一种最为简便的方法是选中需要转化图片的内容,然后复制再到QQ或微信聊天窗口中粘贴,这时表格会自动的转为图片格式,右键”另存为…”即可。

Excel表格另存为图片

如何查询或替换Excel中的?和*

很多人会发现在Excel中替换星号或问号时会将几乎所有内容都替换掉,这是因为*和?在Excel具有特殊含义,星号代表字串,问号代表单个字符。那么如果仅搜索星号或问号该怎么办呢,其实只需要在前面加上一个~(tilde)就好了,也就是~*或~?

如何进行单元格内换行

使用快捷键 Alt+Enter(Windows)或 Opt+Enter(Mac)

如需超出单元格部分的自动换行,点击工具栏自动换行或右击设置单元格格式>对齐>自动换行

 

MySQL常见问题

MySQL的主要配置参数
MySQL忘记root密码
MySQL存储引擎
Invalid default value
MySQL数据库操作命令
MySQL数据类型及取值范围
删除名称包含相同前缀或关键词的数据表

MySQL的主要配置参数

join_buffer_size
read_buffer_size
read_rnd_buffer_size
sort_buffer_size
设置方法如设置sort_buffer_size为4M:
SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
缓冲池内存
innodb_buffer_pool_size
建议设置为:总内存-(每个线程所需要的内存*连接数)-系统保留内存
key_buffer_size (MyISAM相关)
查询MyISAM表所占用的空间大小

select sum(index_length) from information_schema.tables where engine='myisam';

MySQL服务器I/O相关配置参数
InnoDB:
innodb_log_file_size(单个事务日志文件的大小)
innodb_log_files_in_group(个数)
事务日志总大小:innodb_log_file_size*innodb_log_files_in_group
innodb_log_buffer_size(日志缓冲文件大小通常32M-128M就足够了)
innodb_flush_log_at_trx_commit(刷新日志频繁程度,有三个值0,1,2)
0:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,
但是在一个事务提交不做任何操作。
1【默认】:在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的
刷新。
2【推荐】:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新,
对日志文件每秒刷新一次。

其它建议配置:
可在my.cnf或my.ini文件中设置,需重启MySQL
innodb_flush_method=O_DIRECT
innodb_file_per_table=1
innodb_doublewrite=1
MyISAM:
delay_key_write
OFF:每次写操作后刷新键缓冲中的脏块到磁盘,安全,性能差
ON:只对在键表时指定了delay_key_write选项的表使用延迟刷新
ALL:对所有MyISAM表都使用延迟键写入

安全相关配置参数
expire_logs_days 指定自动清理binlog的天数
max_allowed_packet 控制MySQL可以接收的最大包的大小
skip_name_resolve 禁用DNS查找
sysdate_is_now 确保sysdate()返回确定性日期
read_only 禁止非super权限的用户写权限(从库启用)
skip_slave_start 禁用Slave自动恢复(从库启用)
sql_mode 设置MySQL所使用的SQL模式(strict_trans_tables, no_engine_substitution, no_zero_date, no_zero_in_date, only_full_group_by)

其它常用配置参数
sync_binlog 控制MySQL如何向磁盘刷新binlog(建议主库设为1)
tmp_table_size和max_heap_table_size控制内存临时表大小
max_connections 控制允许的最大的连接数

MySQL忘记root密码

忘记MySQL密码的操作方法:

1.打开终端,输入以下代码

mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables

2.打开一个新终端
mysql -uroot -p
在弹出的密码框中直接回车进入数据库
3.修改root密码

update user set password=PASSWORD('******') where user='root';
flush privileges;

MySQL中去除换行符和回车符

使用replace语句进行替换,然后update一下即可

replace(replace(字段名,char(10),''),char(13),'')

MySQL启动、连接和断开

在Windows中如果将MySQL添加为服务可通过在命令行中(Win+R->cmd)使用如下指令来启动、停止MySQL服务
net start mysql
net stop mysql
连接MySQL可通过如下指令
mysql -hlocalhost -uroot -proot(假定通过root用户连接本地数据库,密码为root)
退出直接在命令行输入quit即可

MySQL存储引擎

通过以下指令可查看MySQL中支持的存储引擎
SHOW ENGINES;
可在其后添加\g或\G,基中\g相当于分号作为结尾,\G则起到美化显示的效果
另一种查询存储引擎的方法是输入如下指令:
SHOW VARIABLES LIKE ‘have%’;

删除名称包含相同前缀或关键词的数据表

通过以下语句就可以获取所有的drop table语句然后执行即可:

Select CONCAT( 'drop table ', table_name, ';' ) 
FROM information_schema.tables 
Where table_name LIKE '%keyword%';


Invalid default value

在创建表格时出现类似这样的报错ERROR 1067 (42000): Invalid default value for …,猜测是字符集问题,因为默认值中使用的是中文,于是在命令行中执行set names gbk,然后在CREATE TABLE的最后一行添加了DEFAULT CHARSET=gbk用以设置表格的默认字符集,再次创建表格顺利执行。

Ignoring query to other database报错

出现这一问题纯粹是由于粗心所致,即误将mysql –uroot -p输入成了mysql -root -p,确实很奇怪,输入后者同样可以登入并不报错,只是要进行操作时就会出现Ignoring query to other database的报错

常见报错及解决方法

1548-Cannot load from mysql.proc. The table is probably corrupted

输入以下指令进行修复

mysql_upgrade  -uroot  -p

MySQL数据库操作命令

创建数据库:CREATE DATABASE 数据库名;
查看数据库:SHOW DATABASES;
选择数据库:USE 数据库名;
删除数据库:DROP DATABASE 数据库名;

1:使用SHOW语句找出在服务器上当前存在什么数据库:
mysql> SHOW DATABASES;

2:创建一个数据库MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;

3:选择你所创建的数据库
mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)

4:查看现在的数据库中存在什么表
mysql> SHOW TABLES;

5:创建一个数据库表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

6:显示表的结构:
mysql> DESCRIBE MYTABLE;

7:往表中加入记录
mysql> insert into MYTABLE values (“hyq”,”M”);

8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;

9:导入.sql文件命令(例如D:/mysql.sql)
mysql> use database;
mysql> source d:/mysql.sql;

10:删除表

mysql> drop TABLE MYTABLE;

11:清空表
mysql> delete from MYTABLE;

12:更新表中数据
mysql> update MYTABLE set sex=”f” where name=hyq;

此外,Linux下经常使用的命令:

1:导入数据库备份文件的方法:
root: mysql –u数据库帐户 –p密码 数据库名 < .sql备份文件

2:MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过  GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下:
mysql> grant all privileges on 数据库明.* to 用户名@localhost identified by “密码”;

3:清空文件内容:
cat /dev/null > 文件名

4:添加帐户:
useradd 用户名 –d 目录名 –s /sbin/nologin(不允许该用户直接登录服务器)

5:设置帐户密码
passwd 用户名

特别注意:
刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行:
use mysql;
delete from User where User=””;
update User set Password=PASSWORD(newpassword) where User=root;

启动:net start mySql;
进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
列出数据库:show databases;
选择数据库:use databaseName;
列出表格:show tables;
显示表格列的属性:show columns from tableName;
建立数据库:source fileName.txt;
匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;
增加一个字段:alter table tabelName add column fieldName dataType;
增加多个字段:alter table tabelName add column fieldName1 dataType,add columns fieldName2 dataType;
多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;
增加一个管理员帐户:grant all privileges on *.* to user@localhost identified by “password”;
每条语句输入完毕后要在末尾填加分号’;’,或者填加’\g’也可以;
查询时间:select now();
查询当前用户:select user();
查询数据库版本:select version();
查询当前使用的数据库:select database();

1、删除student_course数据库中的students数据表:
rm -f student_course/students.*

2、备份数据库:(将数据库test备份)
mysqldump -u root -p test>c:\test.txt
备份表格:(备份test数据库下的mytable表格)
mysqldump -u root -p test.mytable>c:\test.txt
将备份数据导入到数据库:(导回test数据库)
mysql -u root -p test<c:\test.txt

3、创建临时表:(建立临时表zengchao)
create temporary table zengchao(name varchar(10));

4、创建表是先判断表是否存在
create table if not exists students(……);

5、从已经有的表中复制表的结构
create table table2 select * from table1 where 1<>1;

6、复制表
create table table2 select * from table1;

7、对表重新命名
alter table table1 rename as table2;

8、修改列的类型
alter table table1 modify id int unsigned;//修改列id的类型为int unsigned
alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned

9、创建索引
alter table table1 add index ind_id (id);
create index ind_id on table1 (id);
create unique index ind_id on table1 (id);//建立唯一性索引

10、删除索引
drop index idx_id on table1;
alter table table1 drop index ind_id;

11、联合字符或者多个列(将列id与”:”和列name和”=”连接)
select concat(id,’:’,name,’=’) from students;

12、limit(选出10到20条)<第一个记录集的编号是0>
select * from students order by id limit 9,10;

13、MySQL不支持的功能
事务,视图,外键和引用完整性,存储过程和触发器

14、MySQL会使用索引的操作符号
<,<=,>=,>,=,between,in,不带%或者_开头的like

15、使用索引的缺点
1)减慢增删改数据的速度;
2)占用磁盘空间;
3)增加查询优化器的负担;
当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;

16、分析索引效率
方法:在一般的SQL语句前加上explain;
分析结果的含义:
1)table:表名;
2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查询可以利用的索引名;
4)key:实际使用的索引;
5)key_len:索引中被使用部分的长度(字节);
6)ref:显示列名字或者”const”(不明白什么意思);
7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
8)extra:MySQL的建议;

17、使用较短的定长列
1)尽可能使用较短的数据类型;
2)尽可能使用定长数据类型;
a)用char代替varchar,固定长度的数据处理比变长的快些;
b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;
c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;
d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;

18、使用not null和enum
尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;
如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;

19、使用optimize table
对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;

20、使用procedure analyse()
可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:
select * from students procedure analyse();
select * from students procedure analyse(16,256);
第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;

21、使用查询缓存
1)查询缓存的工作方式:
第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。
2)配置缓存参数:
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询;query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。

22、调整硬件
1)在机器上装更多的内存;
2)增加更快的硬盘以减少I/O等待时间;
寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;
3)在不同的物理硬盘设备上重新分配磁盘活动;
如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。

MySQL数据类型及取值范围

MySQL数据类型及取值范围数字

MySQL数据类型及取值范围数字

MySQL数据类型及取值范围文本

MySQL数据类型及取值范围日期时间

Ignoring query to other database报错

出现这个报错通常是由于在登录到MySQL输入mysql -uroot -p时漏掉了-u中的u所致

修改root密码

修改root方法比较多,这里使用直接在用户中修改密码的方法:

>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;

MySQL密码不符合要求

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这一报错通常出现在较新的MySQL版本中,在MySQL命令行中输入
show variables like ‘validate_password%’;可查看到具体的要求
MySQL密码验证

可以通过修改具体参数来调整实际的要求,有时我们在开发环境并不希望设置复杂的密码,此时可以在/etc/my.cnf中加入validate-password = off在取消这一限制。

mysql-bin 文件

默认在/var/lib/mysql下会产生大量的日志文件mysql-bin,时间累积会撑满磁盘,可通过配置文件设置保留天数,如:

PHP常见问题

为什么使用定界符无效或出现报错?
为何通过php输出的中文内容出现乱码?
如何去除Notice级的报错?
时区的相关问题
require(), include(), include_once()和require_once()有什么区别?
如何使用PHP在实现301跳转

为什么使用定界符无效或出现报错?

PHP支持定界符(Delimiter)的使用,这极大的方便了代码的书写,如省去了繁琐的转义、增强了代码可读性等。但定界符的使用对前后空格有着极高的要求,如下图的代码出现了类似这样的报错:

Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\demo.php on line 8

从截图中我们也可以看出定界符到结尾的代码在编辑器中都是以灰色的字体显示的,本例实际上通过将EOF;前的默认添加的缩进(或称Tab)删除后就可解决报错问题了。
定界符Delimiter

为何通过php输出的中文内容出现乱码?

通常出现乱码都是由于字符集的问题所致,目前浏览器大多都支持字符编码的转换(如Chrome下点击Tools>Encoding可指定编码)。但这显然不是解决的方法,如同html可以通过meta标签来指定字符集(Charset)一样(<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ />),php中提供了header方法来解决这一问题,如:header(“Content-Type: text/html; charset=utf-8”);虽然简体中文通常使用gb2312,繁体中文有big5,但推荐使用UTF-8,因为这是一种更为各国所接受的国际标准。

如何去除Notice级的报错?

通常Notice所报错误不会影响程序的执行,如Undefined variable之类的报错。这类错误影响用户体验,可通过php.ini中的error_reporting 部分修改系统设置,如error_reporting=E_ALL & ~E_NOTICE,在php文件中也可以进行相应的设置,如error_reporting(E_ALL^E_NOTICE);想去除warning等报错也可使用同样的方法。

时区的相关问题

php所使用的默认使用UTC,和北京时间相差8个小时,在工作中可能会需要使用北京时间或其它时区。可以通过php.ini中的date.timezone来进行系统级别的设定,也可在代码中进行指定,如date_default_timezone_set(“Asia/Shanghai”);其中的值(这里的Asia/Shanghai)可通过http://www.php.net/manual/zh/timezones.php来进行查询。

require(), include(), include_once()和require_once()有什么区别?

require()和include()包含语句就作用上而言没有本质区别,通常可根据习惯有选择使用。但当require()语句包含了不存的文件时,会报出致命错误(Fatal error),下面的语句不会被执行;同样的情况使用include()语句仅会报出警告(warning),余下的代码仍会被执行。而对于require_once()和include_once()而言,顾名思义,在语句执行时,会检测程序中其它地言是否引用了同样的文件,多这个意义上说,这两个语句会消耗更多的系统资源,因为多了一个检测的动作。

解决中文乱码问题

header("content-type: text/html; charset=utf-8");

 

如何使用PHP在实现301跳转

可通过如下代码可实现301跳转

header("HTTP/1.1 301 Moved Permanently"); 
header("Location: http://www.New-Website.com");

精简形式

header("Location: http://www.New-Website.com",TRUE,301););

ECShop常见问题

手机无法访问的问题

使用手机访问ECShop平台制作的网站时常会默认跳转到mobile文件夹下,而没有设置时内容将为空,因而无法访问到网站的内容。其实这个原理很简单,是index.php中有一段代码判断用户的user agent信息,按原则匹配发现是移动设备就会跳转到mobile文件夹下,对于很多卖家来说,开发移动版本的网站耗时且没有必要,那么可以通过直接注释或删除掉index.php中的下面这部分代码取消判断,让手机客户也访问电脑版的内容就可以了

进入后台会发现“您还没有删除 install 文件夹,出于安全的考虑,我们建议您删除 install 文件夹”,出于安全考虑,同时也避免出现重复安装,建议将安装目录下的install文件夹删除掉,使用FTP或登录空间后执行删除操作即可

淘宝助理tbi转换为jpg

通过淘宝助理导出csv然后再导入ecshop时会发现导出的图片为tbi格式,若想要转换为常用的jpg格式,只需在该文件夹下新建一个文件,拷入下面的内容,并将文件重命名为一个.bat格式的文件(如jpg.bat),双击执行该bat文件,所有图片文件的后缀后都会转换为.jpg。

ECSHOP产品页选项卡切换问题

在使用ECSHOP的过程中如果出现IE9下选项卡切换问题,可按照如下方法予以解决:

1、用编辑器打开goods.dwt
2、在<meta name=”Keywords” content=”{$keywords}” />代码之前加上<meta http-equiv=”X-UA-Compatible” content=”IE=8″
3、大约在347行 到361 行,把那几个选项的h3 标签修改为:div就可以了

常见报错

1.对于Strict Standards: Only variables should be passed by reference in …\includes\cls_template.php on line 406报错,找到对应文件文件,将如下代码

$tag_sel = array_shift(explode(' ', $tag));

修改为

$tag_arr = explode(' ', $tag);
$tag_sel = array_shift($tag_arr);
//$tag_sel = array_shift(explode(' ', $tag));

因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值

2.对于Strict Standards: Non-static method cls_image::gd_version() should not be called statically in includes/lib_base.php on line 346报错
将includes/cls_image.php 文件中如下内容

function gd_version()

修改为
[/php]static function gd_version()[/php]
因为 cls_image::gd_version()为静态函数的调用方法,因而函数前需添加修饰符static
3.对于Strict Standards: Only variables should be passed by reference in includes/lib_main.php on line 1329报错

$ext = end(explode('.', $tmp));

找到上述内容,将其修改为

$ext = explode('.', $tmp);
     $ext = end($ext);