Auto prepend PHP file using htaccess relative to htaccess file

后端 未结 3 1083
清歌不尽
清歌不尽 2021-01-02 01:03

I used:

php_value auto_prepend_file \"file.php\"

in my .htaccess that is in public_html folder.

Now when

相关标签:
3条回答
  • 2021-01-02 01:49

    In your .htaccess

    php_value auto_prepend_file /auto_prepend_file.php
    php_value auto_append_file /auto_append_file.php
    

    Next create 2 files in root

    1) /auto_append_file.php

    $appendFile = $_SERVER['DOCUMENT_ROOT'] . '/append.php';
    require_once($appendFile);
    

    2) /auto_prepend_file.php

    $prependFile = $_SERVER['DOCUMENT_ROOT'] . '/prepend.php';
    require_once($prependFile);
    

    Now it should work on local and live servers irrespective of physical path or website providing each of your websites use the same filenames append.php and prepend.php.

    0 讨论(0)
  • 2021-01-02 01:49

    I would also add, that if you don't know the hard relative server paths (as with shared hosting and/or PaaS which generate paths dynamically on reboot/deploy) then you can do this:

    php_value include_path ./:../:../../:../../../:../../../../
    php_value auto_prepend_file "prepend.php"
    

    In essence this is Pseudo dynamic method/hack/workaround for achieving a .htaccess relative DOCUMENT_ROOT include (which is NOT possible in Apache) as follows:

    php_value include_path "%{DOCUMENT_ROOT}/"
    

    For security, in prepend.php, it's then possible to re/declare include path as follows (to whatever appropriate paths fit the application):

    ini_set('open_basedir',$_SERVER['DOCUMENT_ROOT'].'/':<etc.>);
    

    Could also look like the following if the last few directories are predictable:

    php_value include_path ../../../path/to/www/
    php_value auto_prepend_file "prepend.php"
    
    0 讨论(0)
  • 2021-01-02 02:04

    The file must be inside PHP's include_path. So you must either set the file's directory to be in the include_path inside php.ini, or do it in the .htaccess with a php_value statement.

    php_value include_path ".:/path/to/file_directory"
    php_value auto_prepend_file "file.php"
    

    If you use the above method in .htaccess, be sure to copy the include_path from php.ini in and add the :/path_to/file_directory so you don't lose any already needed includes.

    Alternatively, just add :/path/to/file_directory to include_path directly in the php.ini

    Update

    If you cannot modify the include_path, you might try specifying a relative path to the auto_prepend_file. This should work since the file path sent is processed identically as if it was called with require():

    php_value auto_prepend_file "./file.php"
    
    0 讨论(0)
提交回复
热议问题