Upgrade php จาก 5.3.24 เป็น 5.3.25 แล้วติดปัญหานิดนึงครับ

พอดีวันก่อนอัพเกรด PHP จาก 5.3.24 เป็น 5.3.25 ทุกเครื่องไม่มีปัญหา

แต่มีอยู่เครื่องนึง PHPMyAdmin เกิดปัญหาขึ้น Rebuild แล้วก็ไม่หาย มันขึ้นแบบนี้ครับ

พอเรียกใช้ PHPMyAdmin ไม่ว่าจะเรียกจาก IP http://122.144.155.xx/phpmyadmin

หรือ http//www.domain.com/phpmyadmin ก็เจอปัญหาเหมือนกันคือ

[COLOR=#ff0000][B]Fatal error[/B]: session_start() [<a href=‘function.session-start’>function.session-start</a>]: Failed to initialize storage module: files (path: ) in [/COLOR][B][COLOR=#ff0000]/var/www/html/phpMyAdmin-4.0.3-all-languages/libraries/session.inc.php on line [/COLOR][B][COLOR=#ff0000]83[/COLOR]

[/B][/B]นั่งหาข้อมูลจนตาแฉะแล้วครับ ยังไม่เจอวิธีแก้ปัญหาเลยครับ

ข้อมูลเบื้องต้น
Cent OS 6.4
Apache 2.2.24
MySQL 5.5.14
Php 5.3.25

รบกวนด้วยครับ

php.ini check ค่า session.save_path ดีๆ ครับ

; The path can be defined as:
;
[COLOR=#0000FF]; session.save_path = “N;/path”[/COLOR]
;
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
;
; NOTE 1: PHP will not create this directory structure automatically.
; You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
; use subdirectories for session storage
;
; The file storage module creates files using mode 600 by default.
; You can change that by using
;
[COLOR=#0000FF]; session.save_path = “N;MODE;/path”[/COLOR]
;
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process’s umask.
; http://php.net/session.save-path
[COLOR=#0000FF]; session.save_path = “/tmp”


[/COLOR][COLOR=#000000]สองเครื่อง ค่าเหมือนกันเป๊ะเลยครับ แต่เครื่องนึงใช้ได้ เครื่องนึง ใช้ไม่ได้ครับ[/COLOR][COLOR=#0000FF]
[/COLOR]

มันมี ; นำหน้าแสดงว่าไม่มีผลสิครับ

เอา ; ออก แล้ว fix เป็น /tmp เลยครับ

ผมทำแบบนี้อะครับ ^^

[COLOR=#0000ff]; session.save_path = “N;/path”
; session.save_path = "N;MODE;/[COLOR=#0000ff]path[/COLOR]

[/COLOR]แก้เป็น[COLOR=#0000ff]

[COLOR=#0000ff] session.save_path = "N;/tmp"
session.save_path = “N;MODE;/tmp”

[/COLOR][/COLOR]ถูกต้องไหมครับ แล้วก็ restart apache

ถ้าถูกต้องแล้ว อาการยังเหมือนเดิมครับ[COLOR=#0000ff][COLOR=#0000ff][/COLOR][/COLOR]

ใช้ storage เหรอครับ ถึงใส่ N;PATH;
ใส่แค่ /tmp พอครับ แล้วก็แค่บรรทัดเดียวพอ ตัวอย่างเขามีให้ดูหลายๆแบบ มันเลยมีหลายบรรทัด
แต่ผมว่าตรงนี้ไม่น่าเกี่ยว มันน่าจะใช้ /tmp เป็น default เองอยู่แล้ว

ลองเช็ค code บรรทัด 83 ที่มันบอก error ว่ามี code อะไร ไม่ก็ลองลบ phpmyadmin แล้วลงใหม่เลย
กับเช็ค permission ของ /tmp ดูว่าเป็น 1777 หรือเปล่า
แล้วมีการสร้าง partition /tmp แยกหรือเปล่า มัน mount แล้วหรือยัง ที่ mount ไว้มันอาจจะหลุด ก็เลย permission เปลี่ยน

[COLOR=#0000FF]; session.save_path = “/tmp”[/COLOR]

เอา ; ตรงนี้ออกพอแล้วครับ

ผมว่าทำเรื่อง session save path ก่อนค่อยไปดูที่เหลือดีกว่านะ… อาการมันบอกว่าค่า default ของ session save path เป็นค่าว่างไม่ใช่ /tmp

ผมแยก /tmp ครับ ตอนนี้ /tmp ก็ยังใช้ได้เป็นปกติครับ แล้วก็ลองลบและติดตั้ง phpmyadmin หลายครั้งแล้ว ทั้ง 3.5.x และ 4.0.x ก็ยังอาการเดิมครับ

ทำแล้วครับ restart apache แล้ว ก็ขึ้น error เหมือนเดิมครับ

ที่งงก็คือ เครื่องอื่น ค่าเหมือนกัน แต่ทำงานได้ปกติ แต่เครื่องนี้ เป็นอยู่เครื่องเดียวครับ

ลองสร้าง phpinfo ใส่ใน /var/www/html/phpMyAdmin/ แล้วเรียกดู
ว่ามันโหลด php.ini ที่ path ใหน แล้วมันแสดงค่า session.save.path ไปที่ /tmp ตามที่แราแก้หรือยัง
ถ้ายังไม่เป็น /tmp ก็ต้องหาว่าเพราะอะไร บางทีใน php.ini อาจจะมีกำหนดค่าไว้ซ้ำหลายที่ มันไปใช้ค่าที่อยู่ล่างสุด
หรืออีกกรณีอาจจะโดนกำหนดอยู่ใน .htaccess ใน /var/ww/html หรือใน phpMyadmin ก็ได้

ปล. เปิดดู code phpmyadmin แล้ว ส่วนมากสั่ง ini_set ลองดูใน disable_function ว่าไป disable ini_set ไว้หรือเปล่า

เมืองนอกเขาทำแบบนี้
http://ostico.it/content/linux/phpmyadmin/phpmyadmin-fatal-error-sessionstart

เค้าตอบกันไปถึงใหนแล้ว

[COLOR=#0000FF][B]session.save_path = no value[/B][/COLOR]

ผมลอง phpinfo แล้วครับ ค่ามันยังเป็น no value อยู่เลยครับ ทั้งที่ php ที่ /usr/local/lib/php.ini ก็แก้ session.save_path = “/tmp” เรียบร้อยแล้ว

ทั้ง restart Apache และ restart เครื่องแล้วก็ตาม ก็ยังขึ้นเหมือนเดิม ลองไล่หา .htaccess ในตำแหน่งต่างๆ ก็ไม่มีครับ (ไม่มีไฟล์ .htaccess)

ส่วนใน php.ini ก็มีค่า [COLOR=#0000FF][B]session.save_path [/B][/COLOR]แค่คำแหน่งเดียวครับ ไม่มีที่อื่น บรรทัดอื่น ที่ซ้ำกันครับ

ส่วน disable ini_set อันนี้ผมก็ไม่ได้ Disable ไว้ครับ

ขอบคุณมากครับ สำหรับน้ำใน ในการช่วยเหลือครับ :875328cc:

ด้านบนๆ มันจะมีบอกว่าอ่าน php.ini จาก path ไหนอยู่ครับ ลองดูด้วย

ลองใช้ htaccess ดูนะครับ เอาของเมืองนอกเขามาอ้างอีกที http://www.techheadz.co.uk/205.html#.UbFe2lFj5fM

จากตรงนี้ครับ /usr/local/lib/php.ini

php -c /usr/local/lib/php.ini -i | grep session.save_path

ได้ผลดังนี้ครับ คือมันแจ้งว่ายังไม่ได้กำหนดค่า

PHP: syntax error, unexpected ‘"’ in /usr/local/lib/php.ini on line 185
session.save_path => no value => no value

ค่าก็ใส่แล้วนะครับ session.save_path = “/tmp”


บรรทัด 185 ก็คือ

url_rewriter.tags
[B][COLOR=#0000CD] Default Value: “a=href,area=href,frame=src,form=,fieldset=”[/COLOR][/B]
Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
Production Value: “a=href,area=href,frame=src,input=src,form=fakeentry”