Perché non riesco a utilizzare una variabile nelle mie istruzioni request o include su XAMPP?

StackOverflow https://stackoverflow.com/questions/1210179

  •  06-07-2019
  •  | 
  •  

Domanda

Mentre ripulivo alcuni vecchi script php ho notato alcuni strani comportamenti con le istruzioni request / include quando provo ad usare le variabili.

Sul server live, il seguente codice funziona bene ..

<?php
$test = "http://localhost/elearning/trunk/mypage.php";
require "$test";
?>

..ma sulla mia installazione di XAMPP ((pacchetto base) versione 1.6.7) ricevo il seguente errore:

Avviso: require () [function.require]: l'accesso al file URL è disabilitato nella configurazione del server in C: \ Documents and Settings \ nomeutente \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php sulla linea 22

Avviso: requisito ( http: //localhost/elearning/trunk/mypage.php ) [function.require]: impossibile aprire lo stream: non è stato trovato alcun wrapper adatto in C: \ Documents and Settings \ nomeutente \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php su linea 22

Errore irreversibile: require () [function.require]: apertura non riuscita richiesta ' http: // localhost /elearning/trunk/mypage.php '(include_path =' .; C: \ Documents and Settings \ nomeutente \ Desktop \ xampp-win32-1.6.7 \ xampp \ php \ pear \ ') in C: \ Documents and Settings \ nomeutente \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php on line 22

Se copio + incollo http: //localhost/elearning/trunk/mypage.php (direttamente dall'errore) nel mio browser, mypage.php si carica. È un errore nella mia configurazione o nel mio approccio?

È stato utile?

Soluzione

Non è possibile utilizzare percorsi che iniziano con http: // su alcuni server a causa della sicurezza. Quello che vuoi usare invece è un percorso di directory.

Puoi ottenere il tuo attuale percorso di directory facendo qualcosa come
echo $ _SERVER ['DOCUMENT_ROOT'];

che ti darà il percorso della directory dalla cartella principale del server. Questo è il percorso che si desidera utilizzare per includere / richiedere elementi.


Se non lo capisci del tutto, prova questo.

Esistono due tipi di percorsi:

Percorsi per il World Wide Web:
http://example.com/directory/file.php

Percorsi directory server:
/ Home / usr / www / site / html /

Il percorso della directory del server è dove si trovano i tuoi file sul disco rigido del server. Proprio come il disco rigido del tuo computer, non cambia mai se non sposti i file. D'altra parte, il percorso del World Wide Web (quello che tutti usano per accedere al tuo sito Web) può cambiare in base al dominio che stai utilizzando, dove punta il tuo Root del documento, Mod Rewrites e altro.

Nota: Document Root è la directory più in alto da cui il server serve i file. Quindi, se avessi index.php nella radice del tuo documento, verrebbe visualizzato in questo modo sul web: http://example.com/index.php .

Quando PHP cerca un file, utilizza il percorso della directory del server, poiché è in esecuzione sul server. Quando Javascript, che viene eseguito dal computer dell'utente, desidera cercare un file, utilizza il percorso del World Wide Web per accedervi, perché non accede ad esso dal server.

Spero davvero che da qualche parte lì dentro qualcosa abbia senso.

Altri suggerimenti

prova a richiedere " ./ mypage.php " non l'intera directory esatta

PHP non è abbastanza intelligente da sapere che stai includendo dallo stesso server quando usi la notazione URL in quel modo, quindi pensa che stai prendendo i file da un server separato (che può essere pericoloso).

La configurazione del tuo server è impostata per non consentire il caricamento di questi file esterni (evidente dal messaggio di errore "l'accesso ai file URL è disabilitato nella configurazione del server"), quindi non riesce.

Dato che sei sullo stesso server, puoi semplicemente usare percorsi relativi, come:

require_once 'mypage.php'

Non usare un percorso del genere ... usa un percorso relativo o un percorso assoluto.

Esempio

require 'mypage.php'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top