Apache + PhP + MySQL

Đặng Trần Hiếu đã viết:
Em chắc chắn là ko có tính năng nèo của PHP có thể tự động thay đổi lựa chọn của người dùng như thế cả.

Theo em nghĩ, nó dùng iptables để redirect toàn bộ outbound traffic đến máy nó ---> khi anh cố connect đến 1 server mySQL khác thì iptables lại cứ redirect nó quay lại điểm ban đầu.

Chắc là bị redirect, nhưng có lẽ do nó mặc định trong 1 file config nào đó của PhP, vì nếu redirect bằng file hệ thống kiểu iptables thì connect bằng shell cũng sẽ bị lỗi.

/Thanh
 
em không biết nhiều lắm, nhưng vào "ti toe" mấy câu xem có giúp gì được không.

để nêu lại vài vấn đề để anh thử tìm giải pháp xem sao nhé:

anh Thanh có 2 máy, A và B, máy A có MySQL server và máy B có php muốn connect vào SQL nằm trên máy A, đúng không?

- Anh có quyền quản lý (root admin) của máy nào không, có quyền thay đổi cấu hình của máy nào không? (for reference)

- máy A anh đã setup để chấp nhận access từ remote host chưa? SQL account của anh có được phép chấp nhận connection từ host khác chưa? chấp nhận từ TẤT CẢ các host khác hay chỉ từ 01 domain/IP khác mà thôi (câu hỏi này chắc là thừa, nhưng mà vẫn hỏi lại để đảm bảo tính chính xác)

- thử thay đổi "quyền truy cập" từ máy khác xem có truy cập được không

Để xác đinh vấn đề trên máy A hay máy B (hay cả 2):

- giả sử anh đã setup account SQL cho phép connect từ bên ngoài (xác định theo IP?), anh đã thử connect từ một máy C khác (với phương pháp tương tự) xem có được không? (khả năng là cũng không được, vì trục trặc nằm có thể ở máy có chứa SQL server)



... có một cách nữa là gọi bác Duy sang setup cho :D
 
Mai Thanh Hà đã viết:
em không biết nhiều lắm, nhưng vào "ti toe" mấy câu xem có giúp gì được không.

để nêu lại vài vấn đề để anh thử tìm giải pháp xem sao nhé:

anh Thanh có 2 máy, A và B, máy A có MySQL server và máy B có php muốn connect vào SQL nằm trên máy A, đúng không?

- Anh có quyền quản lý (root admin) của máy nào không, có quyền thay đổi cấu hình của máy nào không? (for reference)

- máy A anh đã setup để chấp nhận access từ remote host chưa? SQL account của anh có được phép chấp nhận connection từ host khác chưa? chấp nhận từ TẤT CẢ các host khác hay chỉ từ 01 domain/IP khác mà thôi (câu hỏi này chắc là thừa, nhưng mà vẫn hỏi lại để đảm bảo tính chính xác)

- thử thay đổi "quyền truy cập" từ máy khác xem có truy cập được không

Để xác đinh vấn đề trên máy A hay máy B (hay cả 2):

- giả sử anh đã setup account SQL cho phép connect từ bên ngoài (xác định theo IP?), anh đã thử connect từ một máy C khác (với phương pháp tương tự) xem có được không? (khả năng là cũng không được, vì trục trặc nằm có thể ở máy có chứa SQL server)



... có một cách nữa là gọi bác Duy sang setup cho :D
Hự hự, chứng tỏ ông anh chẳng đọc cí rì cả. Ngay từ đầu đã nói là ko có quyền root trên máy có file PHP --> chẳng thay đổi rì cả. File php đó đem sang máy khác thì lại connect được đến mySQL server.
 
Bùi Hải Thanh đã viết:
Ti`m ba(`ng google ma~i kho^ng ddu+o+.c, ho?i luo^n dda^y cho nhanh, ai co' nha~ y' thi` tra? lo+`i ho^. ca'i:

Co' 1 ma'y cha.y Debian, Apache + PhP & MySQL support, nhu+ng khi dda(.t le^.nh connect va`o MySQL tu+` PhP script thi` no' ba'o lo^~i kho^ng connect ddu+o+.c, y' la` no' kho^ng nha^.n ra MySQL username, hostname va` password mi`nh pass trong le^.nh

<?php
$db= mysql_connect(mysql_hostname, mysql_username, password);
?>

Vi` kho^ng nha^.n ra ne^n username, hostname bi. ma(.c ddi.nh la` cu?a he^. ddie^`u ha`nh.

Va^.y pha?i ddo^?i ca'i gi` va` o+? dda^u\?

Ca?m o+n nhie^`u
/Thanh

Bác thử post cái error screen lên xem nào.
 
Lại 1 bác nữa chẳng đọc cí rì cả. Đọc lại đầy đủ từ đầu đi nhá.
 
Hello Hà,

Vấn đề thế này:

Anh có 1 file PhP, mọi khi vẫn chạy bình thường trên 1 máy của trường, connect vào MySQL server ở máy của anh (có quyền admin).

Vẫn file PhP đó khi đặt vào 1 server mới thì nó ko chạy được MySQL command đó nữa, mặc dù user, quyền,... settings ở MySQL server đều đúng (cái này thì tạm tin anh đi, vì anh có quyền admin của MySQL server do nó là máy của anh).

Anh đã bắt thằng quản trị server mới cài PhP và MySQL (4.0) support. Nhưng nó chắc không biết cách cài nên bị trục trặc.

/Thanh
 
Chỉnh sửa lần cuối:
Bùi Hải Thanh đã viết:
Đặng Trần Hiếu đã viết:
Em chắc chắn là ko có tính năng nèo của PHP có thể tự động thay đổi lựa chọn của người dùng như thế cả.

Theo em nghĩ, nó dùng iptables để redirect toàn bộ outbound traffic đến máy nó ---> khi anh cố connect đến 1 server mySQL khác thì iptables lại cứ redirect nó quay lại điểm ban đầu.

Chắc là bị redirect, nhưng có lẽ do nó mặc định trong 1 file config nào đó của PhP, vì nếu redirect bằng file hệ thống kiểu iptables thì connect bằng shell cũng sẽ bị lỗi.

/Thanh
Em chắc chắn là chẳng có file config nèo của PHP có thể làm được việc nì. Theo em nghĩ thì nó có 2 NIC, 1 cái eth0, 1 cái eth1. Nó thiết lập iptables để tất cả các request đến port của SSH hoặc telnet sẽ được redirect đến eth1. Còn các request khác vẫn ở nguyên eth0. Rùi nó lại có 1 iptables rule khác để tất cả các outbound traffic từ eth0 sẽ bị redirect lại chính eth0. Trong khi các outbound traffic từ eth1 vẫn đi đúng hướng.

Giờ phải đi ăn đã, 15' nữa quay lại viết típ.
 
Chỉnh sửa lần cuối:
Hẹhẹ, đang ăn phải vào post lìn. Nếu như những rì em đoán ở bài trước là đúng & host của anh có socket extension cho PHP thì có 1 cách anh có thể connect đến mySQL server được. Thay vì connect trực típ đến mysql server = mysql_connect. Anh dùng socket để connect đến telnet (hoặc SSH) ở localhost. Sau đó thực hiện lệnh tuỳ thích. Hy vọng sẽ thành công.
 
Đặng Trần Hiếu đã viết:
Hẹhẹ, đang ăn phải vào post lìn. Nếu như những rì em đoán ở bài trước là đúng & host của anh có socket extension cho PHP thì có 1 cách anh có thể connect đến mySQL server được. Thay vì connect trực típ đến mysql server = mysql_connect. Anh dùng socket để connect đến telnet (hoặc SSH) ở localhost. Sau đó thực hiện lệnh tuỳ thích. Hy vọng sẽ thành công.

Nếu dùng socket connection thì anh có thể connect luôn tới MySQL server, nhưng anh chưa có ý định tự lập trình lấy MySQL client vì tốn thời gian lắm :)

Anh đang đoán là thằng cu quản trị nó cài PhP với MySQL lib bị lỗi, có thể link vào wrong version hoặc thế nào đó, vì PhP có thể có MySQL lib đi kèm không tương thích với MySQL có sẵn trong máy hoặc không tương thích với MySQL server

/Thanh
 
Bùi Hải Thanh đã viết:
Đặng Trần Hiếu đã viết:
Hẹhẹ, đang ăn phải vào post lìn. Nếu như những rì em đoán ở bài trước là đúng & host của anh có socket extension cho PHP thì có 1 cách anh có thể connect đến mySQL server được. Thay vì connect trực típ đến mysql server = mysql_connect. Anh dùng socket để connect đến telnet (hoặc SSH) ở localhost. Sau đó thực hiện lệnh tuỳ thích. Hy vọng sẽ thành công.

Nếu dùng socket connection thì anh có thể connect luôn tới MySQL server, nhưng anh chưa có ý định tự lập trình lấy MySQL client vì tốn thời gian lắm :)

Anh đang đoán là thằng cu quản trị nó cài PhP với MySQL lib bị lỗi, có thể link vào wrong version hoặc thế nào đó, vì PhP có thể có MySQL lib đi kèm không tương thích với MySQL có sẵn trong máy hoặc không tương thích với MySQL server

/Thanh
Ko, ý em nói là nếu PHP lúc nó cài nó cài kèm luôn PHP socket extension thì có thể dùng các hàm socket có sẵn để kết nối tới SSH qua đó kết nối tới mysql server. Có rất nhiều host có kèm theo socket extension sẵn cho PHP (Host của em là 1 ví dụ :))), xem phpinfo() xem có socket ko.
 
Chỉnh sửa lần cuối:
Đặng Trần Hiếu đã viết:
Ko, ý em nói là nếu PHP lúc nó cài nó cài kèm luôn PHP socket extension thì có thể dùng các hàm socket có sẵn để kết nối tới SSH qua đó kết nối tới mysql server. Có rất nhiều host có kèm theo socket extension sẵn cho PHP (Host của em là 1 ví dụ :))), xem phpinfo() xem có socket ko.

Cái MySQL client có trong máy chạy ngon, thì config cho PhP dùng luôn lib của cái đó có phải đơn giản hơn không?

Hơn nữa anh không nghĩ chạy lệnh OS từ file PhP thì tốt cho security :)

/Thanh
 
Hẹ, ko, đấy là ý em bảo trong trường hợp nì, anh ko thuyết phục được thèng chủ host thì anh còn mỗi cách đấy khả thi thui.
 
Đặng Trần Hiếu đã viết:
Hẹ, ko, đấy là ý em bảo trong trường hợp nì, anh ko thuyết phục được thèng chủ host thì anh còn mỗi cách đấy khả thi thui.

Tim thay cai nay, hy vong la dung loi roi?

"If sql.safe_mode is enabled, mysql_connect() and mysql_pconnect() ignore any arguments passed to them. Instead, the functions attempt to connect to a MySQL server on localhost as the user that PHP runs as, with no password."

Cam on moi nguoi nhieu

/Thanh
 
Tim thay cai nay, hy vong la dung loi roi?

"If sql.safe_mode is enabled, mysql_connect() and mysql_pconnect() ignore any arguments passed to them. Instead, the functions attempt to connect to a MySQL server on localhost as the user that PHP runs as, with no password."

Cam on moi nguoi nhieu

/Thanh
Thế bác chữa được bệnh chưa? em thấy bình thường cài đặt default, sql.safe_mode thường là off, chắc là cái server của anh nó đặt lại à :)

nếu không được, thử chạy trên vài server khác nhau xem sao :) có thể nghĩ ra được sự khác nhau :D

Đặng Trần Hiếu đã viết:
Mai Thanh Hà đã viết:
để nêu lại vài vấn đề để anh thử tìm giải pháp xem sao nhé:
Hự hự, chứng tỏ ông anh chẳng đọc cí rì cả. Ngay từ đầu đã nói là ko có quyền root trên máy có file PHP --> chẳng thay đổi rì cả. File php đó đem sang máy khác thì lại connect được đến mySQL server.
Chú em xung động quá nhỉ :) anh đã nói là "nêu lại vấn đề" mà? vì anh đọc "đề bài" chưa hiểu kỹ, cho nên phải hỏi lại cho rõ ràng thôi.
khi một vấn đề chưa được giải quyết, nêu lại rõ ràng một lần nữa, có thể tìm ra cách giải quyết dễ hơn, chứ cứ như chú em cắm đầu cắm cổ nghĩ ra một loạt phương pháp giải quyết, cũng rất tốt, nhưng đôi khi không thực hiện hết được các phương pháp đó được (ngoài tầm xử lý của người thực hiện).

Với cả đọc lại từ đầu, có thấy nói đến chuyện không có quyền root trên máy có PHP ngay từ đâu đâu (cho đến tận bài số 19, trả lời câu hỏi của em :>), câu hỏi của anh "for reference" mà.

Lại 1 bác nữa chẳng đọc cí rì cả. Đọc lại đầy đủ từ đầu đi nhá.
Cho đến thời điểm chưa giải quyết được vấn đề, để troubleshooting, cần thu thập thêm càng nhiều thông tin càng tốt. SS là phương pháp tốt nhất để thu thập thông tin thôi mà (nhiều khi đọc cũng không hiểu rõ hoặc hiểu nhầm chẳng hạn). Có người giải quyết vấn đề bằng cách "đọc" hàng loạt thông tin, có người lại "xem" thì sẽ dễ hơn :D

Chỉ là góp ý (off topic) thôi.
 
Mai Thanh Hà đã viết:
Tim thay cai nay, hy vong la dung loi roi?

"If sql.safe_mode is enabled, mysql_connect() and mysql_pconnect() ignore any arguments passed to them. Instead, the functions attempt to connect to a MySQL server on localhost as the user that PHP runs as, with no password."

Cam on moi nguoi nhieu

/Thanh
Thế bác chữa được bệnh chưa? em thấy bình thường cài đặt default, sql.safe_mode thường là off, chắc là cái server của anh nó đặt lại à :)

nếu không được, thử chạy trên vài server khác nhau xem sao :) có thể nghĩ ra được sự khác nhau :D

Đặng Trần Hiếu đã viết:
Mai Thanh Hà đã viết:
để nêu lại vài vấn đề để anh thử tìm giải pháp xem sao nhé:
Hự hự, chứng tỏ ông anh chẳng đọc cí rì cả. Ngay từ đầu đã nói là ko có quyền root trên máy có file PHP --> chẳng thay đổi rì cả. File php đó đem sang máy khác thì lại connect được đến mySQL server.
Chú em xung động quá nhỉ :) anh đã nói là "nêu lại vấn đề" mà? vì anh đọc "đề bài" chưa hiểu kỹ, cho nên phải hỏi lại cho rõ ràng thôi.
khi một vấn đề chưa được giải quyết, nêu lại rõ ràng một lần nữa, có thể tìm ra cách giải quyết dễ hơn, chứ cứ như chú em cắm đầu cắm cổ nghĩ ra một loạt phương pháp giải quyết, cũng rất tốt, nhưng đôi khi không thực hiện hết được các phương pháp đó được (ngoài tầm xử lý của người thực hiện).

Với cả đọc lại từ đầu, có thấy nói đến chuyện không có quyền root trên máy có PHP ngay từ đâu đâu (cho đến tận bài số 19, trả lời câu hỏi của em :>), câu hỏi của anh "for reference" mà.

Lại 1 bác nữa chẳng đọc cí rì cả. Đọc lại đầy đủ từ đầu đi nhá.
Cho đến thời điểm chưa giải quyết được vấn đề, để troubleshooting, cần thu thập thêm càng nhiều thông tin càng tốt. SS là phương pháp tốt nhất để thu thập thông tin thôi mà (nhiều khi đọc cũng không hiểu rõ hoặc hiểu nhầm chẳng hạn). Có người giải quyết vấn đề bằng cách "đọc" hàng loạt thông tin, có người lại "xem" thì sẽ dễ hơn :D

Chỉ là góp ý (off topic) thôi.
Khè, vấn đề ko phải là hỏi. Mà là hỏi cí rì, chứ như mấy ông anh, hỏi câu "lỗi rì" thì cũng chịu, có post đi post lại cả trăm lần thì lỗi nó vẫn thế.

Còn vụ sql.safe_mode nếu đúng là cí thèng server của anh nó set là on thì cũng chịu nó thật. Làm thế khác nèo cấm người dùng ko được đặt password cho mysql db.
 
Mai Thanh Hà đã viết:
Thế bác chữa được bệnh chưa? em thấy bình thường cài đặt default, sql.safe_mode thường là off, chắc là cái server của anh nó đặt lại à :)

nếu không được, thử chạy trên vài server khác nhau xem sao :) có thể nghĩ ra được sự khác nhau :D

Chịu chả biết có đúng lỗi không, hy vọng là đúng :) . Email cho thằng cu quản trị máy rồi nhưng chưa thấy trả lời, chắc ngày mai đập cái cốc vào đầu nó xem có giải quyết được tận gốc vấn đề không.

Máy chủ đó về lý thuyết là chỉ mình mình dùng, nhưng vì lý do security nên trường nó cử 1 thằng ra làm admin cho chắc và để chịu trách nhiệm, phải phục vụ yêu cầu của mình về cài đặt... Nó không cài được yêu cầu đó của mình và cũng ko chịu cho mình quyền để cài hoặc trouble shooting.

Cho nên anh cũng phải trouble shooting kiểu đóan mò + google thôi
Cảm ơn mọi người phát nữa! Nếu đập cốc vào thằng kia mà chưa giải quyết được thì sẽ quấy rầy mọi người tiếp hoặc give up :)

/Thanh
 
Như thế tức là anh thuê managed server. Em cứ tưởng managed server thì nó phải cho mình thèng admin nèo đỉnh lém chứ (vì nó đắt hơn dedicated server thường muh). Thế nì thì thà tự làm còn hơn. Vừa rẻ vừa dễ quản lý.
 
Bùi Hải Thanh đã viết:
...
Máy chủ đó về lý thuyết là chỉ mình mình dùng, nhưng vì lý do security nên trường nó cử 1 thằng ra làm admin cho chắc và để chịu trách nhiệm, phải phục vụ yêu cầu của mình về cài đặt... Nó không cài được yêu cầu đó của mình và cũng ko chịu cho mình quyền để cài hoặc trouble shooting.
...

Hie^'u đã viết:
Như thế tức là anh thuê managed server. Em cứ tưởng managed server thì nó phải cho mình thèng admin nèo đỉnh lém chứ (vì nó đắt hơn dedicated server thường muh). Thế nì thì thà tự làm còn hơn. Vừa rẻ vừa dễ quản lý.

Chu' Hie^'u 0 ddo.c ki~, la.i thi'ch ddi tra'ch ngu+o+`i kha'c huh :) 1 tha(`ng la`m admin cho 1 tru+o+`ng dda.i ho.c 0 nha^'t thie^'t pha?i gio?i PHP/MySQL.

Thanh: lo^~i na`y tao chi.u, cha('c cu~ng pha?i google cha'n mo+'i ti`m ra ca'i nguye^n nha^n qua'i go+? a^'y. O+? trong de.myphp.net cu~ng co' 1 tha(`ng mo+'i vie^'t

irn-bru at gmx dot de
27-May-2004 02:27
Note, that the sql.safe_mode configuration setting does effect all mysql_* functions. This has nothing to to with the php safe mode, check the [SQL] section in php.ini.

I found out, that if you set sql.safe_mode = On, mysql_connect will ignore provided username and passwort and makes use of the script owner instead (checked on debian).

Brian
 
Back
Bên trên