今天在迁移公司商城的时候,按照OpenCart一般的迁移步骤,导入数据库和程序文件,设置好Nginx解析,一切都很顺利,最后打开网站出现了两个问题:' O9 \2 P" [! q* T+ ] W6 F
7 H; _, D8 X3 h6 Y
出现报错YOU NEED THE PHP "DOMDocument" EXTENSION INSTALLED(原因是系统没有安装php-xml扩展)
* J" i+ d/ K- a5 b商品图片无法显示(样式正常)(原因是config文件中的路径没有使用绝对路径)
5 {, N/ [3 S5 F0 N3 w后台登录不跳转(原因是session存储目录没有写入权限)" X+ d/ c1 C* s# X
后台无法上传图片(原因是图片目录没有读写权限)
+ [4 C) A# n& j. w列表页无法显示(原因是渲染路径拼写错误)( a2 J# j9 o: e& @3 o- S1 P
注:服务器环境——CentOS 6.9 + Nginx 1.10 + MariaDB 10.3 + PHP 5.6
! x) B5 r* J$ F, F4 \# z* j( c7 G4 j* p0 c
解决办法! _: O/ K3 n( t4 y9 G# f, ?
1. 缺少php-xml扩展
: g: r. L: ?3 M3 f F; m- X! v根据PHP版本安装相应的扩展,我的是PHP 5.6,所以应该安装php56w-xml扩展:
`# U: `0 F' a- U6 U* y% [
! N% O6 R4 ^; u, |! ?4 eyum install -y php56w-xml8 j5 W; l- b4 v5 c! q( X4 k% h
1, F0 S l( U: s1 A' V, U1 u
安装完成后记得要重启php-fpm进程:' D3 @5 o. y( G2 i
7 R8 K0 ~+ e8 P: H- c; d; kservice php-fpm restart; h O6 @) p6 f) B' P
1
7 h9 `0 [: }1 N* I u, O: U重新打开页面,可以正常打开页面了,但是出现了第2个问题,商品图片无法显示。
4 C9 B/ l7 `" a. V' `9 N7 P/ C
, B0 N. G F2 _2. 商品图片无法显示
W9 D- O, B# _/ J, f- ^用Chrome工具看了一下,商品列表中的图片src显示为unknown,直觉是路径有问题,但是PHP脚本路径问题,还是图片路径问题,还无法确定,需要继续排查:
& c. y- x! q$ I5 N. o, D
, u0 o3 x9 ?# u7 q% B7 u查看数据库中product表中图片的路径,一切正常,没有乱码,说明可以排除这个问题;
! N$ ]/ X6 M; z# z8 a查看config.php文件中的路径配置,发现路径中使用了软链接/www/而没有使用绝对路径,这种用法很容易导致程序运行出错1 u4 {5 |8 [# t9 K! }
所以果断更换了该路径为/home/www/,重新上传到网站根目录和admin下的两个config.php文件,两个均需要修改。+ l7 m; ?% h- U0 B# O
再次打开网页,图片已经可以正常显示。8 d4 u& s8 [5 P6 j6 t! } T
: z4 C1 o5 [7 w7 l3 z1 W( s
3. 后台登录不跳转
q1 d2 U: q$ \8 ?% {后台登录无法跳转,首先需要从Nginx错误日志寻找线索,日志级别设为warn,不要使用debug级别,日志记录太过详细导致几百行日志记录看不到问题所在。& I. {- i* u9 o9 y: I) ]" |7 T* e3 z
: X2 |: G0 c$ H; x0 s4 u
SessionHandler::read(): open(/var/lib/php/session/sess_****************, O_RDWR) failed: Permission denied (13)
. n! r# \+ {- \% Z+ ~: W( N; C. H14 \2 Y" d7 \4 W3 a* ~
找到问题所在,解决就简单了,转到/var/lib/php/session目录,设置session目录权限为755即可; F* ~) v2 l1 o1 R
" \+ \( q1 F6 Q! N* V, S; A
# chmod 755 session/
, e, Y9 I' h8 }3 J, ?$ x# X1# [" C3 _$ D! r5 n- y9 A" k
至此迁移的问题基本全部解决,记录下来备查,希望能帮到碰到类似问题的同行。& C. f+ D, N! N! t" c8 `
: J: P) t" c; ~/ D
4. 后台无法上传图片
" A+ W+ E l/ R% m检查Nginx日志发现的问题是:9 E i e3 g! c# i9 F; Z
. M7 ]; T, c1 w$ C[error] open() "/www/www.domain.com/tm/searchTrademarkList.do" failed (2: No such file or directory)* L1 }2 K9 k S( }( M/ u8 j+ J
1
2 a7 }0 C. W% Z7 W此问题和前面的第2个问题一样是因为/www/路径为软链接路径,是在Nginx解析配置www.domain.com.conf中使用了该路径,改成/www/的绝对路径/home/www/即可。5 C% H! M8 v- \4 U, O5 V' R
! t( X6 z0 p' v+ y1 [& U: K+ v
解决路径问题,只是其一,上传时仍然会提示如下错误:
- p$ G( ]. _/ X) b w
) A& J7 n% S( s: VIt was not possible to complete the request due to file system permission restrictions.
y4 P: b8 [$ V7 n1
7 u1 U' L9 E6 g, L- ]% }5 T' L这是CKEditor编辑器的报错,这种报错多半是上传路径的权限不足导致的:
9 ~- j, F7 Y& v! `2 `
* M1 |8 |5 E; G6 e5 J" g// 到网站根目录为image及其子目录catalog提权到7779 }7 |2 Q |2 a8 E) B) z
//(注:此处也有可能是用户、组的问题导致的,比如上传时使用的是root权限,执行时是其他用户,那就需要修改用户、组)
; p. F" }4 G: A; qchmod 777 image;
. f3 d. `: z( B2 w+ c2 Schmod 777 image/catalog
+ f Y- s0 \4 X( X8 q; e/ t& j# b" X
// 如果 catalog下存在子目录还需要将子目录一并提权
3 b, R4 N- ?6 U0 L// 列出子目录
0 ]" D0 p' ~: @- ocd /image/catalog && ls -F | grep '/$'3 D, \9 W6 k* G6 ~# F }) `
chmod 777 1/ 10/ 2/ 22/ : o% Q' i9 _7 S# |. N
5 ?: r" I9 P1 j- _# L( a- w// 同时需要将子目录的缩略图目录提权(如果不提权会导致虽然上传成功,但是仍然无法选择使用已上传的图片)
9 G c& u3 E1 E3 }4 |% Gcd /image/cache/catalog && ls -F | grep '/$'9 n! a5 {! n# }+ }' r! @& z* Q( F
chmod 777 1/ 10/ 2/ 22/ 9 Y8 |7 a `$ R3 J! Y, X& L
) l4 ?- p$ j# j$ ^1* A: v" i/ e& h+ r8 T- A% k. g2 c
2% @+ \0 V1 `% D4 }# m* @
3+ V; E5 |3 D# k: z$ o
4; P$ c* l j7 h* S3 y- P( n3 C
5
6 `9 b: e7 {5 |6
0 C( ^! t7 F- z% K) z9 q. \0 Y! E7
) s! A7 D: e7 |+ B) F4 D: w# s8
* I+ x% d: f7 N" l$ w+ h2 T, d9) _+ [$ W8 b: ~9 W+ i
10
6 s2 ?0 S% H' {, I5 J& w; W11) {! J. r* K( G5 D$ Z! R' e4 P
12
5 j6 D/ C6 G! n8 r% X13
0 Q5 W+ u4 A* |3 _6 T# p14
3 E; }3 G6 E$ c( S+ q回到后台检查,OK,可以正常上传了。
# ~, a" x: `9 e* @如果上述办法仍然不能解决问题,请参考CKEditor官网提供的问题排查方法检查:CKEditor问题排查+ l9 \" W& n' [5 F8 c# E- e2 x
h+ z' Z: j8 Q2 N9 D9 y/ `
5. 列表页无法显示) ^% a( Y3 |; n0 k0 {; ?* p
控制器下的/catalog/controller/product/categorylist.php在渲染输出时误将product/Categorylist中的Categorylist首字母大写,这个错误在Windows Server 2008上正常运行,但是迁移到CentOS上后却无法渲染了,页面显示空白,调试之后发现只是一个字母的问题。
6 \+ Y$ |. D# _ R( n3 U/ R6 B1 y) y2 Q* ~, i, C( p g
原文链接:https://blog.csdn.net/gaoshanliushui131/article/details/90720382
2 p9 j" w) q$ z4 U4 G; `! ?: h8 C( j6 K! {
|