พอดีเริ่มมาหัดเขียน PHP ตอนนี้เริ่มหัดถึง PHP+MySQL แล้ว แต่พอเริ่มดัดแปลง ก็เลยงงครับ รบกวนช่วยหน่อย คือ
Web Server IP-address: 172.16.0.30
MySQL Server IP-address: 172.16.0.31
ทั้งหมดรัน Ubuntu 16.04 ครับ Web Server รัน NGINX ส่วน MySQL รัน Apache + PHPMyAdmin + MySQL ครับ
ประเด็นคือ อยากแยกระหว่าง Database Server กับ Web Server แต่พอเมื่อเขียนสคริปด้านล่างนี้แล้ว กลับขึ้นเป็น HTTP Error 500 ครับ เลยรบกวนขอคำแนะนำหน่อยครับ
<?php
$servername = "172.16.0.31";
$username = "test";
$password = "1234test";
$DBname = "TestDB";
try {
$conn = new PDO("mysql:host=$servername;dbname=$DBname, $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
ได้ใช้ IDE ตัวไหนอยู่ไหมครับ ลองหามาช่วยดูครับ
ตรงบรรทัด $conn = new PDO... มันปิด " ไม่ครบครับ
ใช้ IDE VB Code ครับ ตอนนี้ใช้แบบนี้ แล้วมันได้ครับ รู้สึกมึนๆ ไปเลย
<?php
$servername = "172.16.0.31";
$username = "test";
$password = "1234test";
$DBname = "TestDB";
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
echo "Connected to $dbname at $host successfully.";
} catch (PDOException $pe) {
die("Could not connect to the database $dbname :" . $pe->getMessage());
}
?>
ถ้า syntax error แล้ว 500 น่าจะรัน php-fpm ใช่มั้ยครับ
แนะนำให้เซ็ต php-fpm ให้ log error ลงไฟล์ (เซ็ตแถวๆ pool.d/xxx.conf) ทีนี้เวลามีปัญหาคราวหน้าเข้าไปคุยดูได้เลยครับมีบอกแน่นอน
ขอบคุณครับ
ลองใช้ VS code เป็น editor อย่างน้อยเวลามัน syntax error เราจะได้รู้
ถ้า syntax error ของ PHP มันจะบอกเลยว่าตรงไหนครับ ส่วน HTTP 500 มันเกิดจากหลายสาเหตุมาก และหลายๆ ครั้งเกิดจากหลายๆ สาเหตุรวมกันครับ
code ของเขามันมี syntax error ตาม reply แรกน่ะครับ
ผมว่าไม่น่าจะเกี่ยวกับ double quote หายไปนะ เพราะในบล็อก try catch มันจะเข้า catch ทันทีที่มี error เกิดขึ้น แต่ไม่น่าจะถึงขั้น HTTP 500 internal server error ได้ เว้นแต่มันถูกตั้งค่าให้เกิดแบบนั้นครับ
syntax error ใช้ try catch ช่วยไม่ได้ครับ
ทำไมของผมมันทำ catch หว่า ทั้งๆ ที่ผมจงใจทำ syntax error ตามนั้นเลย แต่อ่านใน PHP.net แล้วก็ตามที่คุณว่าแหละครับ
ถึงมันได้ มันคงไม่เข้า PDOException มั้งครับ น่าจะเป็น exception อื่น
ถึงมันได้ มันคงไม่เข้า PDOException มั้งครับ น่าจะเป็น exception อื่น
ปล. แล้วเวลา dev ให้ set flag "display_errors" ของ php config เป็น on ครับ
จะได้หา error ง่ายๆหน่อย
วิธีหา error ของทีมผมคือ ssh ไปที่ Server แล้วสั่ง
php ไฟล์.php
เอาเลยตรงๆ ครับ
แหล่งความรู้ เก็บ ๆ