8768 sujets

Développement web côté serveur, CMS

Bonjour, c'est à nous moi !

Je tourne en boucle sur un autre problème.

J'ai utilisé Simple Dom pour parcourir mon serveur depuis mon site, et ainsi voir les photos en miniature sans télécharger quoi que ce soit.
En local, ça tourne rond: je clic sur un dossier, il s'ouvre, et clic que un sous-dossier, et il affiche les photos.

Maintenant que mon site est hébergé, le clic du dossier ne fonctionne pas.

Onclic fonctionne, donc ma page de base est ok, et sur la fonction js, xhr.send(data); me donne une erreur 500 avec Failed to load ressource.

J'ai appris PHP seul dans mon coin, mais JS, je sèche totalement. Pourriez vous m'aiguiller ?

Page photo:
<!DOCTYPE html>
<html lang="fr">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    [#red]<script src="<?php echo Router::webroot('js/fonctiondevelopphoto.js'); ?>"></script>[/#]
    <link rel="stylesheet" href="<?php echo Router::webroot('css/style.css'); ?>" type="text/css" charset="utf-8" />
  </head>
<body> 
      <div class="container-fluid" [#red]id="data"[/#]>
  
          <?php require_once CORE.DS.'affichephotolistserv.php';?>
        
      </div>
</body>    
 </html> 


page affichephotolistserv.php
<?php 
// Connection au serveur
$url = 'http://******adresse serveur*****/Medias/Photo/'; 
Require_once CORE.DS.'connectwebdav.php';
//-------------------------
require_once CORE.DS.'simple_html_dom.php';
$html = new simple_html_dom();
$html->load($serveur);

foreach ($html->find('h1') as $title){
    $title->outertext = '';
}

foreach ($html->find('a') as $a){ // je cherche les liens
	if ($a->href=="/Medias/"){
		$a->outertext = ''; //voir pour faire mieux...
	}else{

    $a->id="lien1";
    $a->class="dossiers";
    $ref = $url.$a->href; //je fabrique la nouvelle adresse
    $a->href = '#data'; // je change l'adresse du lien vers une ancre
    $a->onclick="myGetByAJAX('".$ref."')";
	}
} 
	
	?><div class="container-fluid">
		<div class="listephot">
		<?php foreach ($html->find(".dossiers") as $doss){ ?>
			<div class="dossierlistpho"><?php echo $doss;?></div>
			<?php } ?>
		</div>
	</div>

<?php
$photo = $html->save();  //je sauvegarde


Fonction JS
function myGetByAJAX(ref) {
       var data = new FormData();
        data.append('ref', ref);
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById('data').innerHTML = this.responseText;
            }
        };
        xhr.open("POST", "../webroot/banane.php", true);
        xhr.send(data);   
        
    }
Page banane.php ( ce qui va s'afficher dans #data)

<?php
if (isset($_POST['ref']) || (isset($retou))){ 
	$ref = $_POST['ref'];

		// Connection au serveur
	$url = $ref;
	Require_once CORE.DS.'connectwebdav.php';
		//--Je passe par le DOM----
		
	require_once CORE.DS.'simple_html_dom.php';
	$html2 = new simple_html_dom();
	$html2->load($serveur);
	foreach ($html2->find('h1') as $title){  // je supprime le titre
    	$title->outertext = '';
	}
	
	foreach ($html2->find('li') as $li) {

		foreach ($li->find('a') as $a){ // je cherche les liens
			
			$info = pathinfo($url.$a->href, PATHINFO_EXTENSION);

			$tab = explode(" ", $a); // pour chercher le "dossier parent"
				if (in_array('Parent', $tab)){//Pour changer parent directory
					$a->class="retour";
					$a->href = '#data'; // pour le reste, je change l'adresse du lien vers une ancre
					$retou = dirname($ref);
					$a->onclick="myGetByAJAX('".$retou."/')"; // et je fabrique le Onclick vers le bon lien de retour

					
				// si le lien envoie vers une image, utiliser la page d'affichage
				}elseif (strtolower($info) == "jpg" || strtolower($info) == "JPG" || strtolower($info) == "png") {
					$ref2 = $url.$a->href; //je fabrique la nouvelle adresse
			   		$a->class="albumPhoto";
			   		$a->href = '#data';
					$a->adresse=$ref2;//je fabrique la nouvelle adresse photo d'album photo
			    
			    }elseif (strtolower($info) == "db" || strtolower($info) == "mod") {  // si c'est une fichier Thumbs.db, le supprimer.
					$li->outertext = ''; //voir pour faire mieux...

				}elseif (strtolower($info) == "mp4" || strtolower($info) == "avi" || strtolower($info) == "wmv" || strtolower($info) == "wav" || strtolower($info) == "webm" || strtolower($info) == "mov") {
					$a->class="camescope";
					$a->adresse=$ref2; //je fabrique la nouvelle adresse mp4 si une vidéo s'est glissée
								
				}else{
					$ref2 = $url.$a->href; //je fabrique la nouvelle adresse de sous dossier
					$a->id="lien1";
					$a->class="dossierPhoto";
				    $a->href = '#data'; // pour le reste, je change l'adresse du lien vers une ancre
				    $a->onclick="myGetByAJAX('".$ref2."')"; // et je fabrique le Onclick vers le bon lien
				}
			}
		}
//-------------------------- Maintenant, fabrication de la page #data--------------------->
		
		// affichage du retour
		

			foreach ($html2->find(".retour") as $ret){
			?><div class="repertoire">Répertoire <?php echo basename($retou);?>/<a style="color:red"><?php echo basename($url);?></a></div>	
			<div class:"container" id="retour">
					<img src="http://****/webroot/img/return.png" alt=" "  width="3%" height="auto"/><?php echo $ret;?>
				</div><?php
			}

		// affichage des photo
			 
?><div class="container-fluid" id="listephot">

	
	<?php foreach ($html2->find(".albumPhoto") as $albPhoto){ ?>
				<div class="container-fluid" >				
					<div class="responsive">			  					  	
					  	<div class="gallery">
					  	
						    <a href="<?php echo $albPhoto->adresse; ?>" onclick="window.open(this.href);return false">
						      <img src="<?php echo $albPhoto->adresse; ?>" alt="Photo indisponible" width="600" height="400">
						    </a>

						<div class="desc" style="text-overflow: ellipsis;"><?php echo substr($albPhoto,-17); ?></div>
						</div>
					</div>
				</div>
	<?php } 
					  
					
				
//affichage des vidéos
	 
	?>
	<div class="film">
		<?php foreach ($html2->find(".camescope") as $vids){ ?>
		
		<div class="container-fluid">		
			<p>Vous regardez <?php echo $vids; ?></p>
			<div class="video">
				<video width="300" height="auto" controls="controls">
					<source src="<?php echo $vids->adresse;?>" type="video/mp4" />
					<source src="<?php echo $vids->adresse;?>" type="video/webm" />
					<source src="<?php echo $vids->adresse;?>" type="video/ogg" />

					  <!--[if lte IE 6 ]>
					   <embed src="<?php.'echo $vids;'.?>" type="application/x-shockwave-flash"  allowscriptaccess="always" allowfullscreen="true" width="400" height="222">
					   </embed>
					  <![endif]-->
					  Vous n'avez pas de navigateur moderne, ni Flash installé... suivez les liens ci-dessous pour télécharger les vidéos.
				</video>
			</div>

		</div> <?php } ?>
	</div><?php
			

			// affichage des dossiers
						

			?><div class="container-fluid">
					<div class="listephot">
					<?php foreach ($html2->find(".dossierPhoto") as $dossPhoto){ 	?>
					<div class="dossierlistpho2"><img src="http://********t/webroot/img/dosphoto.png" alt=" "  width="50%" height="auto"/><?php echo $dossPhoto;?></div>
				<?php } ?></div>
			</div>
	
</div>		
<?php

}		
$dossierphoto = $html2->save();  //je sauvegarde

Modifié par johuv (03 Jul 2019 - 19:33)
Bonjour, le problème d'une erreur 500, c'est qu'il ne donne pas d'information sur le type de problème. Je suis une bille en JS. Comment puis-je trouver d'où ça vient ?
Je cherchant, cherchant, je ne vois que l'adresse de la fonction JS, dont le language m'est encore difficile:
 xhr.open("POST", "../webroot/banane.php", true);

Quelle forme doit prendre
<?php echo Router::webroot('banane.php'); ?>

pour être comprit par la fonction, s'il vous plait ?

Bon, je reviens sur cette hypothèse, quand je change l'adresse, j'ai une erreur 404. Le problème est donc plus haut...

Vraiment personne pour m'aiguiller ?
Modifié par johuv (08 Jul 2019 - 19:39)
Bon, maintenant je sais ou est générée cette erreur, Je résume le tout:
Ma page photo est générée par ceci

<body>  
      <div class="container-fluid" id="data">       
          <?php require_once CORE.DS.'affichephotolistserv.php';?>      
  	</div>  	
	</body>


et Affichephotolistserv.php

	<?php 
	// Connection au serveur
	$url = 'http://****/Medias/Photo/'; 
	Require_once CORE.DS.'connectwebdav.php';
	//-------------------------
	require_once CORE.DS.'simple_html_dom.php';
	$html = new simple_html_dom();
	$html->load($serveur);

	foreach ($html->find('h1') as $title){
    	$title->outertext = '';
	}

	foreach ($html->find('a') as $a){ // je cherche les liens
	if ($a->href=="/Medias/"){
		$a->outertext = ''; //voir pour faire mieux...
	}else{

    $a->id="lien1";
    $a->class="dossiers";
    $ref = $url.$a->href; //je fabrique la nouvelle adresse
    $a->href = '#data'; // je change l'adresse du lien vers une ancre
    $a->onclick="myGetByAJAX('".$ref."')";
	}
	} 
	
	?><div class="container-fluid">
		<div class="listephot">
		<?php foreach ($html->find(".dossiers") as $doss){ ?>
			<div class="dossierlistpho"><?php echo $doss;?></div>
			<?php } ?>
		</div>
	</div>

	<?php
	$photo = $html->save();  //je sauvegarde


Ces codes affiche dans la page "photo.php" les dossiers photos de mon serveur freenas que je veux voir apparaître.
Tous ces dossiers sont "cliquables" grâce à une fonction js qui fonctionne sans soucis et qui renvoie dans #data l'url cliquée à "banane.php" qui génère photos, video (si il a une vidéo camescope) ou dossier si l'url renvoie un sous-dossier.
Page "banane.php"

		<?php
	if (!empty($_POST['ref'])){ 
	$ref = $_POST['ref']; //url cliquée

		// Connection au serveur
	$url = $ref;  //indique à connectwebdav.php l'url à ouvrir
	Require_once CORE.DS.'connectwebdav.php';
	//--Je passe par le DOM----	
	require_once CORE.DS.'simple_html_dom.php';
	$html2 = new simple_html_dom();
	$html2->load($serveur);

	foreach ($html2->find('h1') as $title){  // je supprime le titre du serveur
    	$title->outertext = '';
	}

	foreach ($html2->find('li') as $li) {
		foreach ($li->find('a') as $a){ // je cherche les liens			
			$info = pathinfo($url.$a->href, PATHINFO_EXTENSION);

			$tab = explode(" ", $a); // pour chercher le "dossier parent"
				if (in_array('Parent', $tab)){//Pour changer parent directory
					$a->class="retour";
					$a->href = '#data'; // pour le reste, je change l'adresse du lien vers une ancre
					$retou = dirname($ref);
					$a->onclick="myGetByAJAX('".$retou."/')"; // et je fabrique le Onclick pour fair un "retour à la page d'avant"

					
				// si le lien envoie vers une image, l'afficher
				}elseif (strtolower($info) == "jpg" || strtolower($info) == "JPG" || strtolower($info) == "png") {
					$ref2 = $url.$a->href; //je fabrique la nouvelle adresse
			   		$a->class="albumPhoto";
			   		$a->href = '#data';
					$a->adresse=$ref2;//je fabrique la nouvelle adresse photo d'album photo
			    
			    }elseif (strtolower($info) == "db" || strtolower($info) == "mod") {  // si c'est une fichier Thumbs.db ou  mod, le supprimer.
					$li->outertext = ''; 

				}elseif (strtolower($info) == "mp4" || strtolower($info) == "avi" || strtolower($info) == "wmv" || strtolower($info) == "wav" || strtolower($info) == "webm" || strtolower($info) == "mov") {
					$a->class="camescope";
					$a->adresse=$ref2; //je fabrique la nouvelle adresse video
								
				}else{echo $ref;
					$ref2 = $url.$a->href; //je fabrique la nouvelle adresse
					$a->id="lien1";
					$a->class="dossierPhoto";
				    $a->href = '#data'; // pour le reste, je change l'adresse du lien vers une ancre
				    $a->onclick="myGetByAJAX('".$ref2."')"; // et je fabrique le Onclick vers le bon lien
				}
			}
		}
	//-------------------------- Maintenant, fabrication de la page #data--------------------->
	négligeable pour l'instant dans mon soucis		
	// affichage du retour
	//affichage des photos
	//affichage des vidéos	
	<?php
	}		
	$dossierphoto = $html2->save();  //je sauvegarde



Mon problème est quand je clique sur un dossier, j'ai une erreur 500. Un code four-tout. En cherchant la source, j'ai découvert que la fonction JS envoie bien $_POST['ref'] à la page "banane.php" mais cette erreur 500 intervient juste entre ces deux lignes et je ne comprends pas pourquoi...

	$url = $ref;  //indique à connectwebdav.php l'url à ouvrir
	Require_once CORE.DS.'connectwebdav.php';


Ceci fonctionne pourtant très bien en local et $url est une bonne adresse qui fonctionne.

Sauriez vous comme puis-je résoudre ce problème ? sans pouvoir me "balader" dans les dossiers et afficher ce que je veux, mon site familial n'a plus d'utilité...
Bonjour,

Problème résolu en ajoutant

php_value display_errors on


dans le fichier htaccess. tout bêtement. Les erreurs ont apparues et j'ai pu tout corriger en un claquement de doigts. Parfois on cherche des jours et c'est tout bête ! Smiley mur
Modifié par johuv (11 Jul 2019 - 20:47)