THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Je voudrais savoir si je suis le seul à avoir ce problème.

Dans le back office si j'édite un contenu, produit, etc., dans la colonne de droite les photos n'apparaissent pas et dans les logs PHP j'ai un truc de fou

PHP Fatal error:  Class 'Baseobjclassable' not found in /var/home/xyz/public_html/classes/Document.class.php on line 5, referer: http://www.xyz.net/xyzadmin/contenu_modifier.php?id=1&dossier=1

En vrai, cela vient de la balise img le src="../fonctions/redimlive.php?type=contenu&nomorig=heart_1.jpg&width=&height=200&opacite=&nb="

et le plus fort si j'appelle directement l'url dans un nouvel onglet

http://www.xyz.net/fonctions/redimlive.php?type=contenu&nomorig=heart_1.jpg&width=&height=200&opacite=&nb=

Pas d'erreur et l'image s'affiche...

Merci de me confirmer (si possible) que je ne suis pas fou.

Offline


En fait en BO les images 'dans la colonne de droite' sont stockes dans le dossier (par exemple)
http://localhost/thelia_1.5.2/client/gfx/photos/produit/

le 'redimlive' est il me semble uniquement utilise en FO...


le-bouquiniste.com                                                      tongue  plugin 1.4.x / 1.5   => valeurstock / Mailpaiement / formcontact

  • manu
  • faï tot petar miladiu

Offline


Non non on passe bien par redimlive pour les images dans le BO.

Hier tu avais mis une autre réponse disant que tu avais trouvé le pb, finalement ce n'est donc pas les realpath le pb ? (je ne vois pas en quoi realpath pourrait poser soucis en fait)


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


En fait en BO les images 'dans la colonne de droite' sont stockes dans le dossier (par exemple)

Oui, et elles y sont, le souci vient de l'appel sur le fichier 'redimlive' qui génère cette erreur lorsqu'il est appelé du BO

le 'redimlive' est il me semble uniquement utilise en FO...

Non, regarde le source des pages 'contenu_modifier', 'produit_modifier'...
Il est utilisé pour réaliser une vignette de 200px max de hauteur de l'image

Offline


manu wrote:

Hier tu avais mis une autre réponse disant que tu avais trouvé le pb, finalement ce n'est donc pas les realpath le pb ?

Et non... c'était juste le cache de mon navigateur. de rage, j'ai supprimé le message :-(

manu wrote:

(je ne vois pas en quoi realpath pourrait poser soucis en fait)

Moi non plus...

Offline


Et pourtant, il semblerait qu'il y ait des soucis avec realpath() sur php 5.3.1 (cf. http://stackoverflow.com/questions/4049 … -realpath), et le changelog PHP (http://php.net/ChangeLog-5.php)


OpenStudio Toulouse

Offline


Suite...

Je n'ai pas trouvé d’où vient le souci exactement (surement d'un réglage de l'hébergement/ version PHP, car cela marche bien en local, chez OVH...).

Et j'ai une nouvelle rassurante, j'ai récupéré la dernière version de THELIA sur le SVN; fait la MAJ et plus de soucis => Donc, il ne reste plus qu'à attendre la version 1.5.3 officiel

A la comparaison des fichiers 1.5.2 et de la future 1.5.3, la piste de roadster sur le realpath me semble la mieux.

Offline


J'ai eu une nouvelle idée, en étudiant le PHPinfo.

J'ai désactivé APC et ça marche...

Bug APC, realpath, un peu des deux ? en tout cas résolu

  • manu
  • faï tot petar miladiu

Offline


Il y a aussi cette note dans la documentation php (http://php.net/manual/fr/function.realpath.php ) :

Le script qui s'exécute doit avoir les permissions en exécution sur tous les dossiers de la structure, sinon, la fonction realpath() retournera FALSE.


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

  • manu
  • faï tot petar miladiu

Offline


et tu n'aurais pas un cache opcode d'activé ? xcache ? apc ? etc


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

  • manu
  • faï tot petar miladiu

Offline

  • manu
  • faï tot petar miladiu

Offline


J'ai fait plusieurs tests avec différentes configurations.

Le problème pour moi ne viendrait pas de realpath (mais je les ai tous viré sur le svn dans classes et fonctions)

php 5.3.3 sans cache opcode :
thelia 1.5.2 => ok
thelia 1.5.3 => ok

php 5.3.3 avec xache :
thelia 1.5.2 => ko
theliea 1.5.3 => ko

php 5.3.3 avec apc :
thelia 1.5.2 => ok
thelia 1.5.3 => ok

Après avoir pas mal cherché, il semblerait que les opcode cache autre que APC ne soient pas très au point.

Tu es sur que tu avais APC informatiqueprog ?


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


manu wrote:

Tu es sur que tu avais APC informatiqueprog ?

Certain, je n'ai pas souhaité désactiver APC.
En attendant THELIA 1.5.3, j ai modifié le fichier "ImagesAdmin.class.php"
en remplaçant ligne 87

<img src="../fonctions/redimlive.php?type=<?php echo $this->typeobjet ?>&nomorig=<?php echo($row->fichier); ?>&width=&height=200&opacite=&nb=" border="0" />

par

<img src="<?php echo($this->chemin_objet($row->fichier)); ?>" border="0" style="max-height:200px;"/>

La configuration en cause
THELIA 1.5.2
PHP 5.3.3-7+squeeze14
APC V3.1.3p1

PS : sur ce fichier, il faudrait remplacer dans les liens les "&" par "&"
ligne 88; 109; 111

<a href="<?php echo $this->url_page_admin() . "&id_photo=".$row->id."&action=modclassementphoto&type=D"; ?>">
<a href="<?php echo $this->url_page_admin() . "&id_photo=".$row->id."&action=modclassementphoto&type=D"; ?>">
  • manu
  • faï tot petar miladiu

Offline


J'ai monté la même configuration, aucun soucis.


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


J'ai monté la même configuration, aucun soucis.

Cela confirme qu'il y a bien quelque dans la configuration de mon hébergement qui pose problème. (réglages de sécurité, de l'APC...)

En tout cas, merci manu pour ces confirmations et l'information pour le realpath

  • manu
  • faï tot petar miladiu

Offline


Bonjour,

serait-il possible que tu remplaces le contenu du fichier classes/Baseobjclassable.class.php par le code suivant :

<?php
require_once(__DIR__."/Baseobj.class.php");

class Baseobjclassable extends Baseobj {

	private function construire_where_clause($colonnes = false) {
		if ($colonnes == false)
			$where_colonne = "";
		else if (is_array($colonnes)) {
			$where_colonne = "";

			foreach($colonnes as $colonne) {
				$where_colonne .= "$colonne=".intval($this->$colonne)." and ";
			}
		}
		else
			$where_colonne = "$colonnes=".intval($this->$colonnes)." and ";

		return $where_colonne;
	}

	protected function modifier_classement_base($id, $classement, $colonnes = false, $methode_module = false) {

		if ($this->charger_id($id)) {

			$where_colonne = $this->construire_where_clause($colonnes);

			if ($classement > $this->classement) {
				$between = "$this->classement and $classement";
				$delta = -1;
			}
			else {

				$between = "$classement and $this->classement";
				$delta = +1;
			}

			$query = "select * from $this->table where $where_colonne classement BETWEEN $between";

			$resul = $this->query($query);

			while ($resul && $row = $this->fetch_object($resul, get_class($this))) {
				$row->classement += $delta;
				$row->maj();
			}

			$this->classement = $classement;
			$this->maj();

			if ($methode_module != false) ActionsModules::instance()->appel_module($methode_module, $this);
		}
	}

	protected function changer_classement_base($id, $sens, $colonnes = false) {

		if ($this->charger_id($id)) {

			$where_colonne = $this->construire_where_clause($colonnes);

			if ($sens == "M")
				$req = " < " . $this->classement . " order by classement desc";
			else if ($sens == "D")
				$req = " > " . $this->classement . " order by classement";
			else
				return;

			$res = $this->query("select id, classement from $this->table where $where_colonne classement $req limit 0,1");

			if ($res && $this->num_rows($res) > 0) {

				$repl_id = $this->get_result($res, 0, 0);
				$repl_classement = $this->get_result($res, 0, 1);

				$res = $this->query("update $this->table set classement = ".intval($repl_classement)." where id = $this->id");

				if ($res)
					$this->query("update $this->table set classement = ".intval($this->classement)." where id = $repl_id");
			}
		}
	}
}
require_once(__DIR__."/actions/ActionsModules.class.php");

Merci


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Bonjour,

Avant

[Tue Sep 25 08:59:48 2012] [error] PHP Fatal error:  Class 'Baseobjclassable' not found in /var/home/maquette152/public_html/classes/Document.class.php on line 6,

Après... plus d'erreur

Bravo.