Comment ThinkPHP 3.2 lit-il les fichiers de ressources sous Public ?
我想大声告诉你
我想大声告诉你 2017-05-16 13:09:39
0
7
751

Structure des répertoires :

projet
|---Application
|---Public
    |---blog-frontend
        |---Accueil
            |---js
            |---css
            |---img
            |---xxx.md
|---PensezPHP
|---index.php

Le contenu du fichier d'entrée index.php est le suivant :

if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// Activez le mode débogage. Il est recommandé de l'activer pendant la phase de développement ou de le définir sur false pendant la phase de déploiement.
définir('APP_DEBUG',true);
//Définir le répertoire de l'application
définir('APP_PATH','./App/');
//Présentation du fichier d'entrée ThinkPHP
nécessite './ThinkPHP/ThinkPHP.php';
// Cher ^_^ Vous n'aurez besoin d'aucun code plus tard, c'est aussi simple que cela

Configuré en public config.php

'TMPL_PARSE_STRING' =>
    '__STATIC__' => __ROOT__ '/Public/blog-frontend',
),

Et utilisez les ressources en utilisant Public dans la vue : introduisez des ressources statiques

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

Il n'y a aucun problème avec le code ci-dessus et il a été introduit avec succès.

Cependant, dans le contrôleur

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

Sortie

faux

Étrange, j'ai réessayé d'ouvrir la vue

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

Sortie

faux

J'ai réessayé fopen et je l'ai remplacé par file_get_contents. Le résultat était toujours false, qu'il s'agisse de la sortie dans le contrôleur ou de la vue. . J'ai donc changé le suffixe .md en .txt et le résultat était toujours false.

Comment le résoudre ?
Supplément :
Merci pour votre aide. Grâce à la méthode de @jiny, le problème a été résolu.

Pour une raison quelconque, je l'imprime dans IndexController.class.php

var_dump(__ROOT__);
var_dump(__PUBLIC__); 

(Ce qui précède est la valeur par défaut, je ne l'ai pas configuré.)

sortie :

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

répondre à tous(7)
曾经蜡笔没有小新
function Xaction(){
    $file = $_SERVER['DOCUMENT_ROOT']."/Public/blog-frontend/Home/xxx.md";
    $fopen = fopen($file,'r');
    var_dump($fopen);
}
//在控制器里要这么写 $_SERVER['DOCUMENT_ROOT'] 
習慣沉默
  1. Tout d'abord, vous devez comprendre quel est le chemin correspondant lorsque PHP exécute la méthode Xaction ? Le fichier d'entrée dans
    ThinkPHP sert de point d'entrée, ce qui signifie que l'exécution de la méthode est effectivement terminée dans ce fichier (divers require), donc le chemin où se trouve la méthode d'exécution de Xaction est le répertoire où se trouve index.phpPHP 执行 Xaction 这个方法的时候对应的路径是什么?
    ThinkPHP 中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种 require),所以执行 Xaction 的方法所在路径即为 index.php 所在的目录

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

Il est recommandé d'utiliser des chemins relatifs
Maintenant que vous connaissez le chemin du script actuel, il est très clair d'obtenir les fichiers ressources sous Public🎜
$file = './Public/blog-frontend/Home/xxx.md'
🎜 🎜
Ty80
我一般用$file = __ROOT__."/Public/Home/xxx.md";
迷茫

Par défaut __PUBLIC__ Vous pouvez l'imprimer et voir.
Je ne pense pas que la façon dont vous avez testé soit correcte. Ne vous précipitez pas pour prouver votre idée de plusieurs manières. Organisez une méthode et procédez étape par étape.

某草草

Lorsque vous utilisez fopen, vérifiez si le fichier répertoire est configuré avec les autorisations correspondantes. Cela peut être la raison.

漂亮男人

Merci pour l'invitation ! Utilisez TP的系统常量__PUBLIC__Citation

Peter_Zhu

Merci pour l'invitation, tp fournit la constante système _PUBLIC_, qui peut être directement référencée en définissant le chemin sous config

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal