• June 2, 2017

    สำหรับ URL

    $SCRIPT_URL = ‘http://’ . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘PHP_SELF’];

    สำหรับ PATH ให้ทำแบบนี้ครับ
    ให้สร้างไฟล์ไว้ไฟล์หนึ่งใน root หรือ ที่ไหนก็ได้ ของ web
    ทุกไฟล์ php ไม่ว่าจะอยู่ตรงไหน ให้เรียก include ไฟล์นี้ก่อน
    และเวลา include/require ทุกครั้งให้เรียก โดยใช้ path ต่อจากตัวแปร หรือ define ที่ตั้งโดยไฟล์แรก

    เช่น
    ให้ทุกไฟล์ include ไฟล์ /include/config.php

    <?php
    define('WEB_ROOTDIR', realpath(dirname(__FILE__) . '/..'));
    ?>

    สมมติว่าเวบอยู่ที่ /home/foo/public_html/myweb/

    __FILE__ =  /home/foo/public_html/myweb/include/config.php
    dirname(__FILE__)  = /home/foo/public_html/myweb/include
    WEB_ROOTDIR = /home/foo/public_html/myweb/include/.. ซึ่งจริง ๆ คือ
    /home/foo/public_html/myweb หลังจาก realpath()

    เวลาทุกไฟล์จะ include อะไรก็ตามก็ให้ใช้ relative path กับ เวบ โดยใช้ WEB_ROOTDIR แทนเช่น

    สมมติ ไฟล์ที่ต้องการ include อยู่ใน <webroot>/admin/index.php

    <?php
    require_once(__FILE__ . '/../config/config.php');
    require_once(WEB_ROOTDIR . '/adodb/adodb.inc.php');
    require_once(WEB_ROOTDIR . '/include/myclass.php');
    ...
    ...
    ?>

    ง่ายมะ แล้วทีนี้จะย้าย script ไป folder ไหนก็ได้ โดยเปลี่ยนแค่บรรทัดเดียวคือ บรรทัดที่ require_once(‘/../config/config.php’) ให้ชี้ไปถูกที่

    และมีวิธีที่ไม่ต้องแก้อะไรเลยด้วย โดยทำแบบนี้ แต่ไม่รับรองจะ work ทุก server นะ และ วิธีนี้อาจจะใช้ไม่ได้ถ้าใช้ เวบที่จะใช้ URL Rewrite หรือ Alias บนบาง server … (แต่ส่วนใหญ่น่าจะใช้ได้)

    <webroot>/admin/index.php

    <?php
    define(WEB_ROOTDIR, preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF']))))
    require_once(WEB_ROOTDIR . '/adodb/adodb.inc.php');
    require_once(WEB_ROOTDIR . '/include/myclass.php');
    ...
    ...
    ?>

    แล้วก็ บางคนอาจจะใช้ $_SERVER[‘DOCUMENT_ROOT’] อันนี้ไม่ portable (บาง web server ใช้มะได้) และใช้มะได้ใน CLI ด้วย

    ลองเอา script นี้ไปวางไว้ที่ต่าง ๆ ในเวบแล้วเรียกดู

    <?php
    
    header('Content-Type: text/plain');
    echo $_SERVER['PHP_SELF'] . "\n";
    echo dirname($_SERVER['PHP_SELF']) . "\n";
    echo preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF'])) . "\n";
    echo realpath('./' . preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF']))) . "\n";
    ?>


เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories