Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika direktori relatif dalam php tidak boleh dibuka?
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"".
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
Laluan relatif merujuk kepada laluan bermula dengan., Contohnya,
./a/a.php (相对当前目录) ../common.inc.php (相对上级目录),
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
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.
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.
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
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文件;
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.
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!