Bagaimanakah ThinkPHP 3.2 membaca fail sumber di bawah Awam?
我想大声告诉你
我想大声告诉你 2017-05-16 13:09:39
0
7
771

Struktur direktori:

projek
|---Apl
|---Awam
    |---blog-frontend
        |---Rumah
            |---js
            |---css
            |---img
            |---xxx.md
|---ThinkPHP
|---index.php

Kandungan fail masukan index.php adalah seperti berikut:

if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// Hidupkan mod penyahpepijatan adalah disyorkan untuk menghidupkannya semasa peringkat pembangunan atau menetapkannya kepada palsu semasa peringkat penggunaan.
define('APP_DEBUG',true);
//Tentukan direktori aplikasi
define('APP_PATH','./App/');
//Perkenalkan fail masuk ThinkPHP
memerlukan './ThinkPHP/ThinkPHP.php';
// Sayang ^_^ Anda tidak memerlukan sebarang kod kemudian, ia semudah itu

Dikonfigurasikan dalam config.php

awam
'TMPL_PARSE_STRING' =>
    '__STATIC__' => __ROOT__ .
),

Dan gunakan sumber menggunakan Awam dalam paparan: perkenalkan sumber statik

<script src="__STATIC__/Home/js/jquery.min.js"></script>

Tiada masalah dengan kod di atas dan ia telah berjaya diperkenalkan.

Walau bagaimanapun, dalam pengawal

function Xaction(){
    $file = "/Public/blog-frontend/Home/xxx.md";
    $fopen = fopen($file,'r');
    var_dump($fopen);
}

Output

false

Pelik, saya cuba fopen dalam paparan semula

$file = "__STATIC__/Home/xxx.md";
$fopen = fopen($file,'r');
var_dump($fopen);

Output

false

Saya mencuba sekali lagi fopen dan menggantikannya dengan file_get_contents Hasilnya masih false sama ada ia adalah output dalam pengawal atau paparan . Jadi saya menukar akhiran .md kepada .txt dan hasilnya masih false.

Bagaimana untuk menyelesaikannya?
Tambahan:
Terima kasih atas bantuan anda Melalui kaedah @jiny, masalah telah diselesaikan.

Atas sebab tertentu, saya mencetaknya dalam IndexController.class.php

var_dump(__ROOT__);
var_dump(__PUBLIC__); 

(Di atas ialah lalai, saya belum mengkonfigurasinya.)

output:

rentetan(0) ""
string(10) "__PUBLIC__" // jika var_dump(__ABCDE__);// string(9) "__ABCDE__"
我想大声告诉你
我想大声告诉你

membalas semua(7)
曾经蜡笔没有小新
function Xaction(){
    $file = $_SERVER['DOCUMENT_ROOT']."/Public/blog-frontend/Home/xxx.md";
    $fopen = fopen($file,'r');
    var_dump($fopen);
}
//在控制器里要这么写 $_SERVER['DOCUMENT_ROOT'] 
習慣沉默
  1. Pertama sekali, anda perlu memahami apakah laluan yang sepadan apabila PHP melaksanakan kaedah Xaction? Fail masukan dalam
    ThinkPHP berfungsi sebagai titik masuk, yang bermaksud bahawa pelaksanaan kaedah sebenarnya telah selesai dalam fail ini (pelbagai memerlukan) , jadi laluan di mana kaedah melaksanakan Xaction terletak ialah direktori di mana index.php terletakPHP 执行 Xaction 这个方法的时候对应的路径是什么?
    ThinkPHP 中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种 require),所以执行 Xaction 的方法所在路径即为 index.php 所在的目录

  2. 建议使用相对路径
    既然知道当前脚本的所在路径,那么要获取 Public

Adalah disyorkan untuk menggunakan laluan relatif
Sekarang anda mengetahui laluan skrip semasa, adalah sangat jelas untuk mendapatkan fail sumber di bawah Awam🎜
$file = './Public/blog-frontend/Home/xxx.md'
🎜 🎜
Ty80
我一般用$file = __ROOT__."/Public/Home/xxx.md";
迷茫

Lalai __PUBLIC__ Anda boleh mencetak dan melihatnya.
Saya tidak fikir cara anda menguji adalah betul. Jangan tergesa-gesa menggunakan pelbagai cara untuk membuktikan idea anda dan lakukan langkah demi langkah.

某草草

Apabila menggunakan fopen, semak sama ada fail direktori dikonfigurasikan dengan kebenaran yang sepadan Ini mungkin sebabnya.

漂亮男人

Terima kasih atas jemputan! Gunakan TP的系统常量__PUBLIC__Petikan

Peter_Zhu

Terima kasih atas jemputan, tp menyediakan pemalar sistem _PUBLIC_, yang boleh dirujuk terus dengan menentukan laluan di bawah konfigurasi

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan