Por que eu sou incapaz de usar uma variável em meu exigem ou incluir declaração sobre XAMPP?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Enquanto a limpeza de alguns scripts PHP antigos tenho notado algum comportamento estranho com exigem / incluir declarações quando tento variáveis ??de uso.

No servidor ao vivo, o seguinte código funciona bem ..

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

.. mas na minha instalação do XAMPP ((pacote básico) versão 1.6.7) eu recebo o seguinte erro:

Atenção: require () [function.require]: URL de acesso ao arquivo está desativado na configuração do servidor em C: \ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ tronco \ test.php na linha 22

Atenção: require ( http: //localhost/elearning/trunk/mypage.php ) [function.require]: não fluxo aberto: nenhum envoltório apropriado poderia ser encontrado em C: \ Documents e Settings \ \ desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ e-learning \ tronco \ teste.php sobre linha 22

Erro fatal: require () [function.require]: abertura Falha necessário ' http: // localhost /elearning/trunk/mypage.php '(include_path =' .; C: \ Documentos e Settings \ \ desktop \ xampp-win32-1.6.7 \ xampp \ php \ pêra \ ') em C: \ Documents and Settings \ username \ desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ tronco \ test.php na linha 22

Se eu copiar + colar http: //localhost/elearning/trunk/mypage.php (diretamente do erro) no meu navegador, cargas mypage.php. É este um erro na minha configuração, ou a minha abordagem?

Foi útil?

Solução

Você não pode usar caminhos que começam com http: // em alguns servidores por causa da segurança. O que você quer usar em vez disso é um caminho de diretório.

Você pode obter o seu atual caminho do diretório, fazendo algo parecido
echo $_SERVER['DOCUMENT_ROOT'];

que lhe dará o seu caminho do diretório da pasta raiz do servidor. Esse é o caminho que você deseja usar para incluir / exigem coisas.


Se você não entendo muito bem isso, tente isso.

Existem dois tipos de caminhos:

World Wide Web caminhos:
http://example.com/directory/file.php

Directory Server caminhos:
/ Home / usr / www / site / html /

O caminho do diretório do servidor é o local onde os arquivos estão localizados no disco rígido do servidor. Muito parecido com o disco rígido do seu computador, é nunca muda a menos que você mover os arquivos. Por outro lado, O Caminho World Wide Web (aquele usos todos para acessar seu site) pode mudar de acordo com o domínio que você está usando, onde o documento raiz está apontando, Mod Rewrites, e muito mais.

Nota: A raiz do documento é o mais alto de diretório que o servidor serve arquivos. Então, se você tivesse index.php na raiz do seu documento, ele iria aparecer como este na web: http://example.com/index.php .

Quando o PHP procura por um arquivo, ele usa o Path Directory Server, porque ele está sendo executado no servidor. Quando Javascript, que funciona a partir do computador do usuário, quer olhar para um arquivo, ele usa o caminho da World Wide Web para acessá-lo, porque ele não está acessando a partir do servidor.

Eu realmente espero que em algum lugar lá, alguma coisa fazia sentido.

Outras dicas

Tente exigem "./mypage.php" não todo o diretório exato

PHP não é inteligente o suficiente para saber que você está incluindo a partir do mesmo servidor quando você usar a notação de URL assim, então ele pensa que você está agarrando arquivos de um servidor separado (que pode ser perigoso).

A configuração do seu servidor está definido para o carregamento disallow esses arquivos externos (evidente pela mensagem de erro "URL de acesso ao arquivo está desativado na configuração do servidor"), por isso está falhando.

Uma vez que você está no mesmo servidor, você pode simplesmente usar caminhos relativos, como:

require_once 'mypage.php'

Não use um caminho assim ... usar um caminho relativo ou um caminho absoluto.

Exemplo

require 'mypage.php'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top