Olá, esses dias me deparei com um problema com a função autoload do php, estava desenvolvendo meu TCC, um sistema para gestão de igrejas.
Até então estava tudo funcionado normalmente em meu
localhost, mais minha dor de cabeça começou quando fui fazer o deploy para o
servidor web na Digital Ocen, logo após o upload dos arquivos fui fazer os
teste no sistema, e para meu desespero nada funcionou, tentei de tudo: instalei
o PDO, habilitei ele no php.ini e nada funcionou. Segue abaixo o script do
autoload que eu estava usando.
<?php
function __autoload($Class) {
$cDir = ['Conn'];
$iDir = null;
foreach ($cDir as $dirName):
if (!$iDir && file_exists(__DIR__ . "\\{$dirName}\\{$Class}.class.php") && !is_dir(__DIR__ . "\\{$dirName}\\{$Class}.class.php")):
include_once (__DIR__ . "\\{$dirName}\\{$Class}.class.php");
$iDir = true;
endif;
endforeach;
if (!$iDir):
trigger_error("Não foi possível incluir {$Class}.class.php", E_USER_ERROR);
die;
endif;
}
?>
Essa solução funciona normalmente no ambiente windows, mais
no ambiente linux é um desastre por causa da separação de diretório do linux
que é diferente da encontrada no windows. A solução para isso é uma constante
que o php tem que trata esse tipo de incompatibilidade.
A constante DIRECTORY_SEPARATOR resolve esse tipo de
incompatibilidade com o uso de barras para a separação de diretórios no linux.
Segue abaixo a solução do do código a cima.
<?php
function __autoload($Class) {
$cDir = ['Conn'];
$iDir = null;
foreach ($cDir as $dirName):
if (!$iDir && file_exists($file = __DIR__ . DIRECTORY_SEPARATOR . $dirName . DIRECTORY_SEPARATOR . $Class . '.class.php') && !is_dir($file)):
include_once ($file);
$iDir = true;
endif;
endforeach;
if (!$iDir):
trigger_error("Não foi possível incluir {$Class}.class.php", E_USER_ERROR);
die;
endif;
}
?>
Com essa simples constante do php evitamos essa
incompatibilidade entre sistemas.
Abraço e até a próxima dica.

0 comentários :
Postar um comentário