8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai refondu en très grande partie mon site internet. Tout fonctionne parfaitement en local sur Wamp, mais là, j'ai une erreur 500 avec l'hébergeur. Vu qu'il fonctionnait avant le changement de fichiers, je sais que ce n'est pas les modules ou quoi que ce soit coté apache, c'est forcement mes codes.

Ma première version du site était hébergée sur hebergratuit.net. J'ai supprimé tous les anciens fichiers pour installer les nouveaux fichiers à la place. Même phpmyadmin y est passé.

"Impossible de traiter cette demande via www.monsite.hebergratuit.net à l'heure actuelle.
HTTP ERROR 500"

J'ai donc essayé de vérifier tout, même les changements d'adresses de certains liens intra-site présents sur le site (genre remplacement des http://locahost:8080/sitelocal/ par http://adresse du site )
j'ai vérifier/modifié les droits d'accès des fichiers en 755 (sauf les htaccess de redirection qui sont resté en 644);
et J'ai inclu dans mon layout/default.php :

ini_set('display_errors', 'On');
    error_reporting(E_ALL);

pour voir les erreurs. ensuite j'ai modifié mes deux htaccess avec

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>

et

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /webroot/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [PT,L]
</IfModule 


pour voir si ce n'étaitt pas ça, pour ensuite supprimr mon htaccess de la racine pour voir si je peux au moins afficher ma page par default. Je peux aller sur mon layout même si des erreurs s'affichent ( Mon site est tout rangé par dossiers. j'utilise mes htaccess pour diriger vers l'index.php qui défini ceci:

<?php
define('WEBROOT',dirname(__FILE__)); 
define('ROOT',dirname(WEBROOT)); 
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core'); 
define('BASE_URL',dirname(dirname($_SERVER['SCRIPT_NAME']))); 

require CORE.DS.'includes.php'; 
new Dispatcher(); 


et par concéquent, j'ai les messages suivants qui s'affichent car j'ai supprimé le htaccess:
Remarque : Utilisation de la constante non définie CORE - supposée 'CORE' dans /home/vol11_4/hebergratuit.net/heber_*/htdocs/view/layout/default.php à la ligne 6


j'ai même vérifié les orthographes... là, je sèche. Je tiens à préciser que je ne suis pas du tout expert, je me suis "formé" tout seul.

Auriez-vous une piste ? merci
Bon, après avoir tout reprit mon site local et modifier ce que j'ai à modifier (adresse) mon problème erreur 500 s'est modifié en erreur de routage.

Mes pages ne fonctionnent pas. Mes adresse de la forme
href="<?php echo Router::url('pages/video'); ?>">

ne donnent que les pages de type ...
http://pages/video


En modifiant manuellement, comme ça
http://www.****.hebergratuit.net/pages/video

ça fonctionne.

Mon router:
<?php
class Router{


static $routes = array(); 
static $prefixes = array(); 

/**
* Ajoute un prefix au Routing
**/
static function prefix($url,$prefix){
    self::$prefixes[$url] = $prefix; 
}


/**
* Permet de parser une url
* @param $url Url à parser
* @return tableau contenant les paramètres
**/
static function parse($url,$request){
    $url = trim($url,'/'); 
    if(empty($url)){
        $url = Router::$routes[0]['url']; 
    }else{
        $match = false; 
        foreach(Router::$routes as $v){
            if(!$match && preg_match($v['redirreg'],$url,$match)){
                $url = $v['origin'];
                foreach($match as $k=>$v){
                    $url = str_replace(':'.$k.':',$v,$url); 
                } 
                $match = true; 
            }
        }
    }

    $params = explode('/',$url);
    if(in_array($params[0],array_keys(self::$prefixes))){
        $request->prefix = self::$prefixes[$params[0]];
        array_shift($params); 
    }
    $request->controller = $params[0];
    $request->action = isset($params[1]) ? $params[1] : 'index';
    foreach(self::$prefixes as $k=>$v){
        if(strpos($request->action,$v.'_') === 0){
            $request->prefix = $v;
            $request->action = str_replace($v.'_','',$request->action);  
        }
    }
    $request->params = array_slice($params,2);
    return true; 
}


/**
* Permet de connecter une url à une action particulière
**/
static function connect($redir,$url){
    $r = array();
    $r['params'] = array();
    $r['url'] = $url;  

    $r['originreg'] = preg_replace('/([a-z0-9]+) [decu][^\/]+)/','${1} [decu]?P<${1}>${2})',$url);
    $r['originreg'] = str_replace('/*','(?P<args>/?.*)',$r['originreg']);
    $r['originreg'] = '/^'.str_replace('/','\/',$r['originreg']).'$/'; 
    // MODIF
    $r['origin'] = preg_replace('/([a-z0-9]+) [decu][^\/]+)/',':${1}:',$url);
    $r['origin'] = str_replace('/*',':args:',$r['origin']); 

    $params = explode('/',$url);
    foreach($params as $k=>$v){
        if(strpos($v,':')){
            $p = explode(':',$v);
            $r['params'][$p[0]] = $p[1]; 
        }
    } 

    $r['redirreg'] = $redir;
    $r['redirreg'] = str_replace('/*','(?P<args>/?.*)',$r['redirreg']);
    foreach($r['params'] as $k=>$v){
        $r['redirreg'] = str_replace(":$k","(?P<$k>$v)",$r['redirreg']);
    }
    $r['redirreg'] = '/^'.str_replace('/','\/',$r['redirreg']).'$/';

    $r['redir'] = preg_replace('/ [decu][a-z0-9]+)/',':${1}:',$redir);
    $r['redir'] = str_replace('/*',':args:',$r['redir']); 

    self::$routes[] = $r; 
}

/**
* Permet de générer une url à partir d'une url originale
* controller/action(/:param/:param/:param...)
**/
static function url($url = ''){
    $url=trim($url,'/'); 
    foreach(self::$routes as $v){
        if(preg_match($v['originreg'],$url,$match)){
            $url = $v['redir']; 
            foreach($match as $k=>$w){
                $url = str_replace(":$k:",$w,$url); 
            }
        }
    }
    foreach(self::$prefixes as $k=>$v){
        if(strpos($url,$v) === 0){
            $url = str_replace($v,$k,$url); 
        }
    }
    return BASE_URL.'/'.$url; 
}

static function webroot($url){
    $url=trim($url,'/');
    return BASE_URL.'/'.$url; 
}

}


Smiley corde Smiley crash
Modifié par johuv (02 Jul 2019 - 00:45)
Je suppose qu'ici tu dois mettre l'url complète :
define('BASE_URL',dirname(dirname($_SERVER['SCRIPT_NAME']))); 

D'un manière générale il vaut mieux de toute façon éviter les chemins relatif.

Autrement essaye de echo les différentes valeurs que tu as ici voir si tout est bien rempli

define('WEBROOT',dirname(__FILE__)); 
define('ROOT',dirname(WEBROOT)); 
define('DS',DIRECTORY_SEPARATOR);
define('CORE',ROOT.DS.'core'); 
define('BASE_URL',dirname(dirname($_SERVER['SCRIPT_NAME']))); 
Bonjour,
J'ai le souvenir qu'il y a un problème avec BASE_URL, qui n'est pas forcément bien défini selon la plateforme (UNIX-LIKE vs Windows)
J'ai sous la main un code avec :
$base  = dirname($_SERVER['SCRIPT_NAME']);
define('BASE_URL', $base == DS ? '' : $base);

Bizarrement, il n'y a qu'un seul dirname(), je ne saurais plus vous dire pourquoi. Je vérifie demain avec un code modifié récemment, et qui semble fonctionner.
Meilleure solution
Bonjour,

L'on ma aidé, et je vois que Seven a comprit aussi la $base de mon problème.

J'ai trouvé: en enlevant le
BASE_URL.
(le point avec Smiley langue ) de mes fonctions URL et WEBROOT de mon Router.php, tout refonctionne parfaitement. Je ne comprends pas, par contre, pourquoi ça fonctionne en local et pas en hébergé: j'ai la même version PHP!

static function url($url = ''){
    $url=trim($url,'/'); 
    foreach(self::$routes as $v){
        if(preg_match($v['originreg'],$url,$match)){
            $url = $v['redir']; 
            foreach($match as $k=>$w){
                $url = str_replace(":$k:",$w,$url); 
            }
        }
    }
    foreach(self::$prefixes as $k=>$v){
        if(strpos($url,$v) === 0){
            $url = str_replace($v,$k,$url); 
        }
    }
    return '/'.$url; 
}

static function webroot($url){
    $url=trim($url,'/');
    return '/'.$url; 
}


Merci à vous pour votre aide ! toujours au taquet Smiley biggrin
Modifié par johuv (02 Jul 2019 - 22:06)
Bonjour,
BASE_URL sert dans le cas où votre site n'est pas hébergé directement à la racine mais dans un sous-dossier.
Si vous êtes à la racine, BASE_URL sera vide, c'est pourquoi le supprimer fonctionne dans votre cas.
Pour la différence local/hébergeur, je pense que c'est dû à la plateforme (windows en local, Linux chez l'hébergeur), et un méchant mélange de slashes et antislashes.