Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika direktori relatif dalam php tidak boleh dibuka?

Apakah yang perlu saya lakukan jika direktori relatif dalam php tidak boleh dibuka?

藏色散人
藏色散人asal
2022-12-01 09:25:425860semak imbas

Penyelesaian kepada masalah bahawa direktori relatif PHP tidak boleh dibuka: 1. Gunakan "laluan mutlak"; 2. Tentukan fungsi umum import.php, tetapkannya kepada "import fail secara automatik terlebih dahulu", dan tambahkannya dalam php.ini Hanya ubah suai kandungan kepada "auto_prepend_file = "C:xampphtdocsauto_prepend_file.php"".

Apakah yang perlu saya lakukan jika direktori relatif dalam php tidak boleh dibuka?

Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 8.1, komputer Dell G3.

direktori relatif php tidak boleh dibuka? Ringkasan memerlukan dan sertakan isu laluan dalam PHP

1 Laluan mutlak, laluan relatif dan laluan tidak ditentukan

Laluan relatif

Laluan relatif merujuk kepada laluan bermula dengan., Contohnya,

./a/a.php (相对当前目录)    
../common.inc.php (相对上级目录),

Laluan mutlak

Laluan mutlak ialah laluan bermula dengan / atau C:/ di bawah Windows atau huruf pemacu yang serupa Laluan penuh boleh menentukan fail secara unik tanpa sebarang jalan rujukan. Contohnya,

/apache/wwwroot/site/a/a.php
c:/wwwroot/site/a/a.php

Laluan tidak ditentukan

Mana-mana laluan yang tidak bermula dengan . atau /, dan juga tidak bermula dengan huruf pemacu Windows:/, seperti

a/a.php  
common.inc.php,

Saya fikir ini juga laluan relatif, tetapi dalam mekanisme include/require PHP, laluan jenis ini dikendalikan secara berbeza daripada laluan relatif bermula dengan . memerlukan './a.php' dan memerlukan 'a.php' adalah berbeza!

Mari kita analisa kaedah pemprosesan ketiga-tiga jenis laluan termasuk ini: Pertama, ingat kesimpulan: jika laluan sertakan ialah laluan relatif atau laluan mutlak, ia tidak akan pergi ke laluan_termasuk (include_path ditakrifkan dalam pembolehubah Persekitaran php.ini, atau gunakan set_include_path(...) dalam program untuk mencari fail.

Penerangan persekitaran ujian

Nota: Perbincangan dan kesimpulan berikut adalah berdasarkan persekitaran ini: Andaian A=http://www.xxx.com/app/test/ a.php, sekali lagi tekankan bahawa perbincangan berikut adalah untuk akses terus kepada A.

2. Laluan relatif:

Laluan relatif memerlukan direktori rujukan untuk menentukan laluan akhir fail Dalam sertakan resolusi, Tidak kira berapa banyak tahap bersarang yang terkandung di dalamnya, direktori rujukan ini ialah direktori di mana fail kemasukan pelaksanaan program berada.

Contoh 1

A中定义  require './b/b.php';  // 则B=[SITE]/app/test/b/b.php
B中定义  require './c.php';    // 则C=[SITE]/app/test/c.php 不是[SITE]/app/test/b/c.php

Contoh 2

A中定义  require './b/b.php';  // 则B=[SITE]/app/test/b/b.php 
B中定义  require '../c.php';   // 则C=[SITE]/app/c.php  不是 [SITE]/app/test/c.php

Contoh 3

A中定义  require '../b.php';   //则B=[SITE]/app/b.php 
B中定义  require '../c.php';   //则C=[SITE]/app/c.php  不是 [SITE]/c.php

Contoh 4:

A中定义  require '../b.php';   // 则B=[SITE]/app/b.php 
B中定义  require './c/c.php';  / /则C=[SITE]/app/test/c/c.php  不是 [SITE]/app/c/c.php

Contoh 5

A中定义  require '../inc/b.php';  // 则B=[SITE]/app/inc/b.php 
B中定义  require './c/c.php';     // 则C还是=[SITE]/app/test/c/c.php  不是 [SITE]/app/inc/c/c.php

Contoh 6

A中定义  require '../inc/b.php';  // 则B=[SITE]/app/inc/b.php 
B中定义  require './c.php';       // 则C=[SITE]/app/test/c.php  不是 [SITE]/app/inc/c.php

3 Jalan mutlak

Laluan mutlak agak mudah dan tidak mudah menyebabkan kekeliruan dan kesilapan memerlukan| inclue ialah fail yang sepadan pada cakera.

require '/wwwroot/xxx.com/app/test/b.php';    // Linux中
require 'c:/wwwroot/xxx.com/app/test/b.php';  // windows中

dirname(__FILE__) juga dikira sebagai direktori dalam bentuk laluan mutlak, tetapi sila ambil perhatian bahawa __FILE__ ialah pemalar Ajaib Tidak kira bila bersamaan dengan menulis ini Laluan mutlak fail PHP di mana penyata itu terletak, jadi dirname(__FILE__) sentiasa menunjuk ke laluan mutlak fail PHP di mana pernyataan itu ditulis. Ia tidak ada kaitan dengan sama ada fail ini disertakan dan digunakan oleh fail lain.

Contoh 1

A中定义  require '../b.php';                  // 则B=[SITE]/app/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/c.php

Contoh 2

A中定义  require '../inc/b.php';              // 则B=[SITE]/app/inc/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录

Kesimpulan: Sama ada B disertakan dan digunakan oleh A, atau diakses terus

B如果 require dirname(__FILE__).'/c.php';    // 则始终引用到跟B在同一个目录中的 c.php文件; 
B如果 require dirname(__FILE__).'/../c.php'; // 则始终引用到B文件所在目录的父目录中的 c.php文件; 
B如果 require dirname(__FILE__).'/c/c.php';  // 则始终引用到B文件所在目录的c子目录中的 c.php文件;

4. Laluan yang tidak ditentukan

Pertama, gunakan direktori include yang ditakrifkan dalam include_path untuk menyambung [laluan yang tidak ditentukan] satu persatu Jika fail sedia ada ditemui, masukkan akan berjaya keluar PHP yang melaksanakan pernyataan memerlukan Direktori tempat fail terletak digunakan untuk menggabungkan laluan penuh yang terdiri daripada [laluan tidak ditentukan] untuk mencari fail Jika fail itu wujud, fail sertakan berjaya keluar, jika tidak, ia bermakna fail yang disertakan tidak wujud dan ralat berlaku. Laluan yang tidak ditentukan mudah dikelirukan dan tidak disyorkan.

5.

Kerana "direktori rujukan" dalam "laluan relatif" ialah direktori di mana fail entri pelaksanaan terletak , Laluan "tidak ditentukan" juga mudah dikelirukan, jadi penyelesaian terbaik ialah menggunakan "laluan mutlak" Sebagai contoh, kandungan b.php adalah seperti berikut, tidak kira di mana memerlukan b.php berdasarkan laluan b.php Datang untuk memerlukan

$dir = dirname(__FILE__);
require($dir . '../c.php');

c.php atau tentukan fungsi umum import.php, tetapkannya kepada "import fail secara automatik terlebih dahulu", dan buat konfigurasi berikut dalam php .ini

更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"
更改配置项(可选)allow_url_include = On

Kandungan import.php adalah seperti berikut

function import($path) {    
    $old_dir = getcwd();        // 保存原“参照目录”
    chdir(dirname(__FILE__));    // 将“参照目录”更改为当前脚本的绝对路径
    require_once($path);
    chdir($old_dir);            // 改回原“参照目录”
}

Dengan cara ini, anda boleh menggunakan fungsi import() untuk memerlukan fail tersebut peringkat "direktori rujukan" yang terkandung di dalamnya, ia ialah fail semasa

Pembelajaran yang disyorkan: " Tutorial video PHP

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika direktori relatif dalam php tidak boleh dibuka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn