Incluindo arquivos com distinção entre maiúsculas e minúsculas no Windows a partir de PHP

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Temos um problema ao usar o PEAR bibliotecas em Windows de PHP.

Pear contém muitas classes, estamos fazendo uso de algumas, uma das quais é a classe Mail encontrada em Mail.php.Usamos PEAR no caminho, em vez de fornecer o caminho explícito completo para arquivos PEAR individuais:

require_once('Mail.php');

Em vez de:

require_once('/path/to/pear/Mail.php');

Isso causa problemas no módulo de administração do site, onde existe um mail.php arquivo (usado para enviar e-mails aos usuários).Se estivermos em uma tela administrativa que envia um e-mail (como a tela de administração de usuários que pode gerar e enviar por e-mail novas senhas aleatórias aos usuários quando eles são aprovados na fila de moderação) e tentarmos incluir Mail.php nós "acidentalmente" incluímos mail.php.

Sem alterar para preceder o caminho completo para a instalação do PEAR, exigindo explicitamente os módulos PEAR (não padrão, normalmente você instala o PEAR no seu caminho ...), existe uma maneira de impor o PHP no Windows para exigir arquivos com distinção entre maiúsculas e minúsculas?

Estamos adicionando o caminho PEAR ao caminho de inclusão, portanto, temos controle sobre a ordem do caminho.Também reconhecemos que devemos evitar usar nomes de arquivos que entrem em conflito com nomes PEAR, independentemente do caso, e faremos isso no futuro.Esta página, entretanto (que não é um arquivo de inclusão, mas um controlador), está no repositório há alguns anos, e os plug-ins geram URLS especificamente para fornecer links/redirecionamentos para esta página em seu processamento.

(Suportamos Apache, Microsoft IIS, LightHTTPD e Zeus, usando PHP 4.3 ou posterior (incluindo PHP5))

Foi útil?

Solução

ter 2 arquivos com o mesmo nome no caminho de inclusão não é uma boa ideia, renomeie seus arquivos para que os arquivos que você escreveu tenham nomes diferentes de bibliotecas de terceiros.de qualquer forma, para a sua situação atual, acho que alterando a ordem dos caminhos no caminho de inclusão, você pode corrigir isso.O PHP procura os arquivos nos caminhos de inclusão, um por um.quando o arquivo necessário for encontrado no caminho de inclusão, o PHP irá parar de procurar pelo arquivo.portanto, na seção de administração do seu aplicativo, se você deseja incluir o arquivo PEAR Mail, em vez do mail.php que você escreveu, altere o caminho de inclusão para que o caminho PEAR fique antes do diretório atual.faça algo assim:

<?php
  $path_to_pear = '/usr/share/php/pear';
  set_include_path( $path_to_pear . PATH_SEPARATOR . get_include_path() );
?>

Outras dicas

Como é uma coisa no nível do sistema operacional, não acredito que exista uma maneira fácil de fazer isso.

Você pode tentar alterar sua inclusão de include('Mail.php'); para include('./Mail.php');, mas não tenho certeza se isso funcionará em uma caixa do Windows (não tendo uma com PHP para testar).

Se você estiver usando PHP 4, você pode aproveitar esse erro.Claro que é uma solução complicada ...

Ou você pode simplesmente renomear seu arquivo mail.php para outra coisa...

Tenho quase certeza de que esse problema é causado pelo código NTFS no subsistema Win32.Se você usar um sistema de arquivos instalável Ext2 (IFS), deverá obter distinção entre maiúsculas e minúsculas nessa unidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top