contenido und pear

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

contenido und pear

Beitrag von emergence »

hab mich jetzt im laufe der woche immer mehr mit der integration von pear und contenido beschäftigt....
contenido hat ja seine eigene kleine pear dabei...
irgendwie bringts es die jetztige verbindung zu contenido nicht...

es ergeben sich da einige probleme...
im großen und ganzen muss ich sagen das die jetzige inkludierte version von pear inkombatibel zu php5 ist...
auf der anderen seite sind einfach zu viele include_once in pear enthalten die einfach nicht alle nachmodifiziert werden können... (der aufwand zahlt sich irgendwie nicht aus...)

im cvs_head wurde ja bei cinclude -> pear ergänzt...
das funktioniert nur dann wenn die eingebundene datei keine weiteren include anweisungen beinhaltet...
wenn diese am beginn der pear datei stehen ist das ja kein problem, da könnte man noch mittels getcwd chdir das abfangen... bei includes die erst bei funktionsaufrufen ausgeführt werden, gibts dann aber nen crash...

mein vorschlag (bzw ich machs momentan so):
das inkludierte paket auf nen aktuellen stand bringen -> mit den aktuellsten teilen die aus pear benötigt werden...

und um keine änderung an den paketen vornehmen zu müssen würd ich folgendes in contenido einbauen...

-> function contenido_include

Code: Alles auswählen

		case "pear":
				$include = $what;
				$include_path = ini_get('include_path');
				@ini_set( 'include_path' , $include_path.';'.$cfg['path']['pear']);
				if (ini_get('include_path')==$include_path) { trigger_error("Error: Can't change ini_set to $include<br>", E_USER_ERROR); return; }
				break;
der trick dabei ist an sich ein ganz simpler ->
1. es wird einfach der include_path um den pfad zu contenido pear ergänzt
2. wenn das paket am server eigenen pear vorhanden ist wird das installiert verwendet -> da es im normalfall immer zur php version am server passt
3. falls es dort nicht vorhanden ist wird das contenido eigene verwendet
4. ein abbruch erfolgt dann wenn sich ini_set nicht auf include path anwenden läßt...
5. die letzte möglichkeit die ich oben nicht eingebaut habe wäre noch, falls sich der include_path nicht ändern läßt das $include auf $include = $cfg['path']['pear'] . $what; zu setzen...
die datei wird dann auf alle fälle nachgeladen...
wenn dann weitere include anweisungen im paket vorhanden sind ist dann natürlich ein problem... (aber das ist es so auch...)

das ganze ist als vorschlag für ne nette kleine erweiterung zu contenido zu sehen...
*** make your own tools (wishlist :: thx)
Caddata
Beiträge: 19
Registriert: Fr 28. Nov 2003, 13:42
Wohnort: Bremerhaven
Kontaktdaten:

Beitrag von Caddata »

Hi ermergence,

ich verwende PEAR auch ohne die genannten Änderungen problemlos!
Den PEAR-Pfad habe ich einfach in den include_path gelegt und hatte bisher keine Probleme damit. Selbst HTML_QuickForm funktioniert problemlos und wenn man im Frontend das Caching aktiviert (ob_start() usw.) funktioniert auch der HTML_QuickForm_Controller.
--> http://www.contenido.de/forum/viewtopic ... =quickform
--> http://www.pear-forum.de/viewtopic.php? ... =contenido
Die SOAP-Klassen verwende ich auch problemlos für die Amazon-Integration.
--> http://www.caddata.de

Derzeit arbeite ich an einem Plugin des PEAR-Installers - hab allerdings die Plugin-Integration von Contenido noch nicht ganz begriffen. Wenns fertig ist, werde ich es hier auf jeden Fall posten.


Grüße,
Marco
Auch der längste Weg beginnt immer
mit einem kleinem Schritt!
Bild
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

an sich gehts hier nur darum, das man den include_path am server nicht setzen muss... das sollte meiner meinung nach, contenido selbst machen...
die routine ist ja nur ein kleiner anfang... ich muss da nur noch ne überprüfung einbauen ob der pfad nicht schon gesetzt ist...

sonst hast du natürlich recht, wenn der pfad korrekt im include_path gesetzt ist gibts keinerlei probleme...

das mit dem output buffering hatte ich mir sowieso schon eingebaut
da ich das für die output manipulation nutzen möchte...
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

an sich hab ich jetzt ne ganz nette version der contenido_include zusammengebaut...

ein paar änderungen sind da noch reingeflossen...
bei $where ist nun gross/kleinschreibung egal
bei pear
wird zuerst kontrolliert ob der include_path nicht schon inkludiert ist
ansonsten wird versucht den include_path zu ergänzen...
sollte das nicht klappen wirft die routine momentan einen warning raus...
und setzt den pfad auf $cfg['path']['pear'] . $what
zusätzlich wird kontrolliert ob sich die einzubindende datei im include pfad befindet. falls nicht wird ein fehler ausgegeben...

ebenso neue funktion cPath liefert den pfad zu der datei zurück...

ließe sich sicher noch sauberer umsetzen aber nun ja...
vielleicht hat ja jemand zeit das zu testen...

ach ja die reihenfolge für pear
zuerst wird immer versucht die eigene contenido pear datei zu includieren
erst dann die server seitige falls vorhanden...
hier der code...

Code: Alles auswählen

/**
 * contenido_include: Includes a file
 * and takes care of all path transformations.
 *
 * Example:
 * contenido_include("classes", "class.backend.php");
 *
 * Currently defined areas:
 *
 * frontend 	Path to the *current* frontend
 * conlib		Path to conlib
 * pear 		Path to the bundled pear copy
 * classes		Path to the contenido classes
 * cronjobs 	Path to the cronjobs
 * external 	Path to the external tools
 * includes 	Path to the contenido includes
 * scripts		Path to the contenido scripts
 *
 * @param $where string The area which should be included
 * @param $what string The filename of the include
 * @param $force boolean If true, force the file to be included
 * @param $returnpath $string or boolean false if file is not found
 *
 * @return none
 *
 */
function contenido_include ($where, $what, $force = false, $returnpath = false)
{
	global $client, $cfg, $cfgClient;

	/* Sanity check for $what */
	$what = trim($what);
	$where = strtolower($where);

	switch ($where)

	{
		case "frontend":
				$include = $cfgClient[$client]["path"]["frontend"] . $what;
				break;
		case "wysiwyg":
				$include = $cfg['path']['wysiwyg'] . $what;
				break;
		case "conlib":
		case "phplib":
				$include = $cfg['path']['phplib'] . $what;
				break;
		case "pear":
				$include = $what;
				$include_path = ini_get('include_path');

				if (!preg_match("|".$cfg['path']['pear']."|i", $include_path)) {
					// contenido pear path is not set in include_path

					// we try to add it via ini_set
					if (!@ini_set( 'include_path' , $include_path.PATH_SEPARATOR.$cfg['path']['pear'])) {
						// not able to change include_path
						trigger_error("Warning: Can't add {$cfg['path']['pear']} to include_path", E_USER_NOTICE);
						$include = $cfg['path']['pear'] . $what; unset($where);
					} else {

						$paths = explode(PATH_SEPARATOR, ini_get('include_path'));
						$last = count($paths)-1;
						if ($last >= 2) {
							$tmp = $paths[1];
							$paths[1] = $paths[$last];
							$paths[$last] = $tmp;
							ini_set( 'include_path' ,implode(PATH_SEPARATOR, $paths));

						}
						unset ($paths, $last, $tmp);

					}
				}
				break;
		default:
				$include = $cfg['path']['contenido'] . $cfg['path'][$where] . $what;
				break;
	}

	if ( $where == "pear" ) {

		// now we check if the file is available in the include path
		$paths = explode(PATH_SEPARATOR, ini_get('include_path'));
		foreach ($paths as $path) {
			if (file_exists($path . DIRECTORY_SEPARATOR . $include) && !$foundinpath) {
				$foundinpath = $path;
			}
		}

		if (!$foundinpath)
		{
			$error = true;
		}

		unset ($paths, $path);

	} else {

		if (!file_exists($include) || preg_match("#^\.\./#",$what))
		{
			$error = true;
		}

	}

	if ($returnpath) {

		if ($foundinpath) {
			$include = $foundinpath . DIRECTORY_SEPARATOR . $include;
		}

		if (!$error) {
			return $include;
		} else {
			return false;
		}
	}

	if ($error) {
		trigger_error("Error: Can't include $include", E_USER_ERROR);
		return;
	}

	if ($force == true)
	{
		include($include);
	} else {
		include_once($include);
	}

}


/**
 * cPath: Shortcut to return contenido_path.
 *
 * @see contenido_include
 *
 * @param $where string The area which should be included
 * @param $what string The filename of the include
 *
 * @return complete include path
 *
 */
function cPath ($where, $what)
{
	return contenido_include($where, $what, false, true);
}
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ach ja das einbinden von pear klasse HTML/Common.php bei classes/class.htmlelements.php

würde nur mehr so aus aussehen...

Code: Alles auswählen

cInclude("pear", "HTML/Common.php");
wenn eine anpassung in config.php bei $cfg[path][pear] auf das serverseite pear gelegt wurde wird nur mehr diese verwendet...
*** make your own tools (wishlist :: thx)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Und um mal eine blöde Frage zu stellen: Was genau ist/macht PEAR?

Gruß
HerrB
Caddata
Beiträge: 19
Registriert: Fr 28. Nov 2003, 13:42
Wohnort: Bremerhaven
Kontaktdaten:

Beitrag von Caddata »

Auch der längste Weg beginnt immer
mit einem kleinem Schritt!
Bild
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Ja, wie soll ich sagen, dass hatte ich mir schon durchgelesen. Und das steht da drin:
PEAR is short for "PHP Extension and Application Repository" and is pronounced just like the fruit. The purpose of PEAR is to provide:

A structured library of open-sourced code for PHP users

A system for code distribution and package maintenance

A standard style for code written in PHP, specified here

The PHP Foundation Classes (PFC), see more below

The PHP Extension Community Library (PECL), see more below

A web site, mailing lists and download mirrors to support the PHP/PEAR community
PEAR ist eine strukturierte Bibliothek für PHP-Open-Source-Code, emöglicht Code-Verteilung und Paketpflege, schlägt einen Stil zur PHP-Kodierung vor und bietet eine PFC und PECL. So, so.

Und nun würde ich mich freuen, wenn mir jemand sagen könnte (reine Neugier), was PEAR in Contenido macht...

Gruß
HerrB
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

HerrB hat geschrieben:Und nun würde ich mich freuen, wenn mir jemand sagen könnte (reine Neugier), was PEAR in Contenido macht...
Das eigentliche Goodie sind die Klassen, wobei viele naja...zwar ne gute Idee haben, aber ziemlich "schlecht" umgesetzt sind. Im Moment verwendet Contenido z.b. die PEAR-HTML-Klasse, um die cHTML-Klassen aufzubauen. Der Grund, warum Teile von PEAR bei Contenido dabei sind ist ganz einfach: die wenigsten haben die Möglichkeit, PEAR auf Ihrem Server zu installieren ;)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

@Caddata

an sich funktioniert das ja schon gut mit dem neuen code...
jetzt ergeben sich aber noch ein paar nette problemchen... vielleicht kannst du mir da weiterhelfen...
ich hab mir jetzt ne kleine pear für contenido zusammengestellt...
das einbinden der klassen funktioniert auch ganz gut...
mir fehlt jetzt irgendwie die info wie ich die einträge in
.registry definieren muss... woeit ich das gesehen habe wird das aus package.xml innerhalb der zip datei definiert...
kann ich diese *.reg dateien mittels eines scripts irgendwie selbst erzeugen ? oder muss ich die go-pear.php auseinandernehmen... ?
ebenso muss ich irgendwie ne möglichkeit finden
das ich im pear verzeichnis von contenido ->
data, tests , docs verwenden kann...

da gibts ja die datei pear.ini wo das ja definiert ist...
kann ich diese in das contenido verzeichniss oder sonst irgendwo postieren ?

ich möchte so weit als möglich keine änderungen am pear paket selbst vornehmen müssen...
*** make your own tools (wishlist :: thx)
Caddata
Beiträge: 19
Registriert: Fr 28. Nov 2003, 13:42
Wohnort: Bremerhaven
Kontaktdaten:

Beitrag von Caddata »

Hi emergence,

hmm, also die Einträge in .registry werden automatisch bei der Installation erstellt und sind bei der Auflösung von Abhängigkeiten entscheidend. Wie man die Einträge manuell erstellt - da hab ich mir so noch nie Sorgen drum gemacht.
Erstellt werden die Dateien vom PEAR_Installer unter Zuhilfenahme von PEAR_Registry - wie das im einzelnen abläuft, müsste man dort mal analysieren...

Eventuell wäre es sinnvoll, go-pear optional bei der Contenido-Installation auszuführen, da auch verschiedene Umgebungsvariablen auf dem System erstellt werden. Dabei würden die Verzeichnisse data/, docs/, usw. erstellt werden und die entsprechenden Scripts an die richtige Stelle kopiert. In Verbindung mit dem WebInstaller (als Backend-Plugin) wäre die Verwaltung des Frameworks sicherlich am einfachsten und in Bezug auf künftige Versionen konsistent.

Ich hoffe, das hilft dir etwas weiter... :wink:

Grüße,
Caddata
Auch der längste Weg beginnt immer
mit einem kleinem Schritt!
Bild
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm das ist schlecht...
dann muss ich das mal auf eis legen... soviel zeit, mich da momentan durchzuarbeiten, hab ich momentan nicht...
um go-pear optional beim setup auszuführen müsste man die go-pear dateien im setup ordner verankern und die installation voll automatisieren..., anders ergibt es auch keinen sinn...
und das ist ne menge arbeit... und sicher auch extrem fehler anfällig...

man kann es nun natürlich auch anders machen...
das im pear oderner nur die dateien enthalten sind die unbedingt von contenido erforderlich sind -> momentan ist das nur
HTML/Common.php
den rest könnte man kübeln...
wenn dateien in pear vorhanden sind, werden diese verwendet, ansonsten kann man nur hoffen das die entsprechende datei im server eigenen pear vorhanden ist...

da müsste man, nun ja, überprüfen welche version aktueller ist und dann die entsprechende verwenden...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

das mit dem PEAR-Includieren habe ich mal eingebaut
trixta
Beiträge: 165
Registriert: Di 26. Apr 2005, 12:53
Kontaktdaten:

tidy und pear

Beitrag von trixta »

hallo,

ist es möglich über das "contenido-pear" php tidy (http://de3.php.net/tidy/) "nachzuinstallieren" oder muss ich eine komplett neue pear installation durchführen? muss diese dann alle packete enthalten, die bereits vom provider zur verfügung gestellt werden + die von contenido (falls beim server nicht vorhanden) oder nur die von contenido? muss ich dann auch änderungen an der php.ini vornhemen etc.?

muss erhlich sagen, dass ich da sehr wenig ahnung von habe, aber ausprobieren schadet ja nicht.

bis denne
alex
trixta
Beiträge: 165
Registriert: Di 26. Apr 2005, 12:53
Kontaktdaten:

Beitrag von trixta »

kann mir da keiner weiterhelfen?
Antworten