web-dev-qa-db-fra.com

Php ne fonctionne pas? fonction non incluse

Voici le contexte complet de la situation:

J'ai récemment obtenu un nouveau Mac, je suis un développeur php, j'ai donc téléchargé MAMP et commencé à développer.

J'ai d'abord remarqué que mes inclusions n'étaient pas incluses, mais j'ai changé cela en configurant mon php.ini.

Cependant maintenant, lorsque j'essaie d'inclure un fichier avec une fonction, il ne reconnaît pas la fonction.

Par exemple, j'ai un fichier nommé functions.php:

<?php
function doit(){
    echo "did it";
}
?>

et un fichier qui l'inclut appelé index.php

<?php include("functions.php"); doit();?>

et je reçois ce message d'erreur

Erreur fatale: appel à la fonction non définie doit () dans index.php sur la ligne 4

11
Tom

Donc, si quelqu'un tombe sur ce forum parce qu'il a le même problème, laissez-moi vous expliquer pourquoi et pourquoi cela a mal tourné.

Si vous incluez une fonction qui ne se trouve pas dans votre répertoire (par exemple c: // ou fichier: //) mais incluez plutôt l'utilisation de http. L'inclusion ne peut renvoyer que ce qui a été répété dans le fichier, mais quelque chose comme une variable ou une fonction ne sera pas affichée. Il faut donc toujours inclure des fonctions et des variables dans un répertoire

10
Tom

Parfois, le répertoire actuel n'est pas ce que vous attendez, comme lorsque vous incluez un fichier à partir d'un fichier inclus.

J'aime utiliser $_SERVER['DOCUMENT_ROOT'] sur mes inclusions pour que je puisse toujours les référencer absolument depuis la racine de mon site:

<?php
    include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");
    doit();
?>

Si votre répertoire include est au-dessus de la racine de votre document, vous pouvez utiliser .. pour toujours référencer depuis la racine.

29
Sean Adkinson

Essayez require () au lieu d'inclure. Peut-être que include échoue et que les erreurs ne sont pas affichées.

3
SuitedSloth

J'ai aussi eu ce problème.

Dans mon cas, je découvre que c'est peut-être votre fichier "functions.php" Autorisation refusée.

Veuillez essayer de "chmod 777 functions.php" sur le serveur.

Laissez le fichier functions.php s'exécuter sur le serveur Web.

Merci Thatjuan, Becasue lorsque je change pour utiliser require (), le serveur affiche le bon message d'erreur.

1
Andrew Kin Fat Choi

Pour moi, le problème était dû à un nom de fonction dans le fichier inclus ayant le même nom qu'une fonction dans le fichier initial.

J'ai rendu tous les noms de fonctions uniques et je n'ai plus de problème.

0
Paul B

C'est bizarre. J'ai ce qui suit.

include_once('assets\include\page-essentials\functions-init.php'); 
include_once('assets\include\page-essentials\functions-api.php');
include_once('assets\include\php\results.php');
include_once('assets\include\page-essentials\url-availability.php');

//require($_SERVER['DOCUMENT_ROOT']."\FBH-2020\assets\include\php\boatfeaturecode.php");
require("\assets\include\php\boatfeaturecode.php");

Les trois premiers incluent TOUS contiennent des fonctions et TOUS les travaux (c'est-à-dire les fonctions-init.php, les fonctions-api.php et les résultats.php)

La ligne qui nécessite boatfeaturecode.php ne fonctionne pas, mais la ligne commentée avec $ Server ['DOCUMENT_ROOT'] fonctionne.

Je ne vois pas pourquoi c'est.

peu importe qu'il s'agisse d'une commande INCLUDE OR REQUIRE pour savoir si cela fonctionne ou non.

Il s'agit de IIS sous Windows 10. La structure du répertoire est la norme C:\inetpub\wwwroot \

Le fichier à partir duquel j'appelle ces inclut se trouve dans C:\inetpub\wwwroot\FBH-2020 \

où le chemin des fichiers inclus est

C:\inetpub\wwwroot\FBH-2020\assets\--- etc., comme indiqué dans les trois/quatre premiers inclus, cela fonctionne parfaitement.

0
Andrew Banner