amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > PEAR include-Pfade [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

04.01.2008, 11:08 Uhr

Mad_Dog
Posts: 1944
Nutzer
Hallo,

Ich habe da ein kleines Problem mit den include-Pfaden der PHP-Erweiterung PEAR.

Ich möchte die Module Mail und Mail/mime innerhalb von Klassen benutzen.

Eines meiner php-Programme wird ausschließlich aus der (Linux-) shell (sh bzw. bash) aufgerufen. In diesem Programm werden die includes gefunden und es läuft korrekt.
php code:
<?php

require_once("client.inc.php");
require_once("request.inc.php");
require_once("guest.inc.php");
require_once("template_selector.inc.php");
require_once("html_template.inc.php");
require_once("offer_options.inc.php");

require_once("Mail.php");
require_once("Mail/mime.php");

/*
 *  super_offer
 *
 *  Superklasse für Angebotsklassen
 *
 *  Autor: Norman Walter
 *  Datum: 20.10.2007
 *
 *  Letzte Änderung: 2.1.2008
 *
 */

class super_offer
{
	// Attribute

	var $request;   		// Ein request-Objekt
	var $hotelID;
	var $offer_options;		// Eine Instanz der offer_options-Klasse
	var $client;


Ein anderes Programm besteht aus Php-Code und HTML (für eine GUI). Dort wird ebenfalls eine meiner Klassen eingebunden, die Mail und Mail/mime benutzt. Wenn die entsprechende php-Website über einen Browser aufgerufen wird, werden die Mail bzw. Mail/Mime includes nicht gefunden.
php code:
<?php

/*
 *  newsletter
 *
 *  Newsletter-Klasse für die Newsletter-Funktion des Easymailer.
 *  Verwendet verschiedene Funktionen aus includes/template_utilities
 *  zur Generierung von HTML-Emails.
 *
 *  Autor: Norman Walter
 *  Datum: 24.8.2007
 *
 *  Letzte Änderung: 4.1.2008
 *
 */

require_once("html_template.inc.php");
require_once("client.inc.php");
require_once("timer.inc.php");
require_once("newsletter_archive.inc.php");

require_once("Mail.php");
require_once("Mail/mime.php");

class newsletter
{
  // Attribute

  // Die folgenden Attribute entsprechen den Spalten der Tabelle newletter_archive in der Datenbank

  var $mailid;      // Eindeutige ID für jede Mail
  var $type;        // Typ der Mail. Kann "text" für reinen Text oder "html" sein
  var $filename;    // Der Dateiname des Mailbodys auf dem Server
  var $email;       // Emailadresse, die bei dieser Mail als Absender angegeben wurde
  var $subject;     // Das Thema dieser Mail


Diese Klasse wird in einem php-Skript verwendet, welches vom Web-Browser aufgerufen wird:
php code:
<?

require_once("../includes/html_utilities.inc.php");
require_once("../CLASSES/client.inc.php");
require_once("../CLASSES/html_template.inc.php");
require_once("../CLASSES/http_upload_exception.inc.php");
require_once("../CLASSES/mailaddresses.inc.php");
require_once("../CLASSES/newsletter.inc.php");

session_start();

if(isset($_GET['DEBUG']))
{
	$_SESSION['DEBUG'] = $_GET['DEBUG'];
} else {
	$_SESSION['DEBUG'] = 0;
}

if(!isset($_SESSION['client']))
{
	@session_destroy();
	Header("Location:../Calendar/login.php");
	exit();
}

if(isset($_SESSION['logout']))
{
	session_destroy();
	Header("Location:../Calendar/login.php");
	exit();
}

if (isset($_POST['language']))
{
	$_SESSION['language'] = $_POST['language'];
} elseif (!isset($_SESSION['language'])) {
	$_SESSION['language'] = 2;
}

$langdir = "../Languages/";

switch($_SESSION['language'])
{
	case 1:
		$langfile = $langdir."italian.xml";
		break;
	case 2:
		$langfile = $langdir."german.xml";
		break;
	case 3:
		$langfile = $langdir."english.xml";
		break;
	default:
		$langfile = $langdir."english.xml";
		break;
}
$xml = simplexml_load_file($langfile);

$_SESSION['langfile'] = $langfile;

$styledir = "../CSS/";
if (isset($_SESSION['style']))
{
	switch($_SESSION['style'])
	{
		case 1:
			$stylefile = $styledir."darkblue.css";
			break;
		case 2:
			$stylefile = $styledir."lightblue.css";
			break;
		case 3:
			$stylefile = $styledir."newstyle.css";
			break;
	}
} else {
	$stylefile = $styledir."darkblue.css";
}
$_SESSION['stylefile'] = $stylefile;



if (isset($_REQUEST['action']) )
{
  $action = $_REQUEST['action'];
}
else
{
  $action = "none";
}

/*
if (isset($_GET['subject']) )
{
  $subject = $_GET['subject'];
}
else
{
  $subject = "";
}
*/

if (isset($_REQUEST['subject']) )
{
  $subject = $_REQUEST['subject'];
  $_SESSION['subject'] = $subject;
}
else if (isset($_SESSION['subject']))
{
	$subject = $_SESSION['subject'];
}
else
{
  $subject = "";
}

if (isset($_REQUEST['newsletter_language']) )
{
  $newsletter_language = $_REQUEST['newsletter_language'];
  $_SESSION['newsletter_language'] = $newsletter_language;
}
else if (isset($_SESSION['newsletter_language']))
{
	$newsletter_language = $_SESSION['newsletter_language'];
}
else
{
  $newsletter_language = "";
}


switch($action)
{
	case 'upload_html':

		try
		{
			if ($_FILES['newsletter_file']['error'][0] > 0)
			{
				throw new http_upload_exception(null,$_FILES['newsletter_file']['error'][0]);
			}
		}
		catch (http_upload_exception $ex)
		{
			echo "<h2>Error " . $_FILES['newsletter_file']['error'][0] . "</h2><BR>n";
			echo "<p>" . $ex->getMessage() . "</p>n";
			die($ex->getMessage());
		}

		//echo "<p>Temporary dir = " . ini_get('upload_tmp_dir') . "</p>";
		//echo "<p>Uploading " . $_FILES['newsletter_file']['name'][0] . "</p>";
		//echo "<p>File size is " . $_FILES['newsletter_file']['size'][0] . "</p>";

		$path = "../Newsletter/archive/" . $_SESSION['username'];

  		// Verzeichnis für Newsletter-Archiv dieses clients anlegen
  		//@ mkdir($path, 0700);
  		@mkdir($path, 0777);

  		// Hier soll die hochgeladene Datei hin
  		$destination = $path . "/" . $_FILES['newsletter_file']['name'][0] ;

		if (is_uploaded_file($_FILES['newsletter_file']['tmp_name'][0]))
		{
    		if (!move_uploaded_file($_FILES['newsletter_file']['tmp_name'][0],$destination))
			{
				echo "<h2>Error</h2><BR>n";
				echo "<p>Unable to move uploaded file to destination dir.</p>n";
				die("Unable to move uploaded file to destination dir.");
			}

  			$_SESSION['filename'] = $destination;

  			// Instanz der html_template Klasse bilden
			$template = new html_template($_SESSION['filename']);

			// Pfade bei den Image-Tags entfernen
			$template->stripImagePaths();
			$template->save($_SESSION['filename']);

			Header("Location:newsletter.php?action=upload_images");
		}
		else
		{
			echo "<h2>Error</h2><BR>n";
			echo "<p>Possible attack detected while uploading file.</p>n";
			die("Possible attack detected while uploading file.");
		}

	break;

	case 'upload_images':

		doHeader("Newsletter");

		try
		{
			if ($_FILES['newsletter_images']['error'][0] > 0)
			{
				throw new http_upload_exception(null,$_FILES['newsletter_images']['error'][0]);
			}
		}
		catch (http_upload_exception $ex)
		{
			echo "<h2>Error " . $_FILES['newsletter_images']['error'][0] . "</h2><BR>n";
			echo "<p>" . $ex->getMessage() . "</p>n";
			die($ex->getMessage());
		}

		$path = "../Newsletter/archive/" . $_SESSION['username'];

		//echo "filename on server: " . $_SESSION['filename'] . "<br>";

		$size = count($_FILES['newsletter_images']['name']);
		//echo "size=" . $size . "<br>n";

		for ($i=0; $i<$size; $i++)
		{
  			$image = $_FILES['newsletter_images']['name'][$i];
  			if ($image == "") break;

  			// Hier soll die hochgeladene Datei hin
  			$destination = $path . "/" . $image ;

  			//echo "image=" . $image . "<br>n";
  			//echo "destination=" . $destination . "<br>n";

  			if  ($_FILES['newsletter_images']['name'][$i] != 'none')
  			{
    			move_uploaded_file($_FILES['newsletter_images']['tmp_name'][$i],$destination);
    			// chmod($destination,0755);
  			}

		}

		// Instanz der html_template Klasse bilden
		$template = new html_template($_SESSION['filename']);

		// Welche Bilddateien gehören zu dieser HTML-Datei?
		$image_names = $template->image_names_only;

		echo "<form enctype="multipart/form-data" action="newsletter.php" method="post">n";
		echo "<table>n";

		$i = 0;

		foreach ($image_names as $image)
		{
 			echo "<tr>n";
 			echo "t<td bgcolor="#FFFFFF"><font color="#000000">$image</font></td>n";

 			if (file_exists($path . "/" . $image))
 			{
   				echo "t<td bgcolor="#FFFFFF"><img src="../images/yes.gif" alt="yes"></td>n";
   				echo "t<td bgcolor="#FFFFFF"><font color="#000000">Image file successfully uploaded</font></td>n";
 			}
 			else
 			{
   				echo "t<td bgcolor="#FFFFFF"><img src="../images/no.gif" alt="no"></td>n";
   				echo "t<td bgcolor="#FFFFFF"><input type="file" name="newsletter_images[$i]" size="30"></td>n";
   				$i++;
 			}

 			echo "</tr>n";
		}

		echo "<tr>n";

		if (sizeof($template->missingImages()) != 0)
		{
			echo "t<td>";
			echo "<input type="hidden" name="action" value="upload_images">";
			echo "<input type="hidden" name="subject" value="" . $subject . "">";
			echo "<input type="submit" value="Upload files">";
			echo "</td>n";
			echo "t<td></td>n";
  			echo "t<td></td>n";
		}
		else
		{
			echo "t<td>";
			echo "<input type="hidden" name="action" value="send">";
			echo "<input type="hidden" name="subject" value="" . $subject . "">";
			echo "<input type="submit" value="Send newsletter">";
			echo "</td>n";
			echo "t<td></td>n";
  			echo "t<td><a href="" . $_SESSION['filename'] . "" target="_blank">Preview</td>n";
		}

		echo "</tr>n";
		echo "</table>n";

	break;

	case 'obtain_template':

	    doHeader("Newsletter");

		echo "<form enctype="multipart/form-data" action="newsletter.php" method="POST">n";
		echo "<table border="0" cellpadding="5">n";

  		echo "<tr>n";
    	echo "t<td bgcolor="#EEEEEE"><font color="#000000">Subject</font></td>n";
        echo "t<td bgcolor="#EEEEEE"><font color="#000000">$subject</font></td>n";
        echo "</tr>n";

  		echo "<tr>n";
    	echo "t<td bgcolor="#EEEEEE"><font color="#000000">Language</font></td>n";
        echo "t<td bgcolor="#EEEEEE"><font color="#000000">";

		switch ($newsletter_language)
        {
        	case '1':
        		echo "Italian";
        	break;

        	case '2':
        		echo "German";
        	break;

        	case '3':
        		echo "English";
        	break;

        	default:

        }

        echo "</font></td>n";
        echo "</tr>n";

  		echo "<tr>n";
    	echo "t<td bgcolor="#EEEEEE"><font color="#000000">HTML-File</font></td>n";
        echo "t<td bgcolor="#EEEEEE"><input type="file" name="newsletter_file[0]" size="30"></td>n";
        echo "</tr>n";

  		echo "<tr>n";
    	echo "t<td bgcolor="#EEEEEE">";
		echo "<input type="hidden" name="action" value="upload_html">";
		echo "<input type="hidden" name="subject" value="" . $subject . "">";
		echo "</td>n";
        echo "t<td bgcolor="#EEEEEE"><input type="submit" value="Upload File"></td>n";
  		echo "</tr>n";

		echo "</table>n";
		echo "</form>n";

	break;

	case 'send':

		$c = new client($_SESSION['username']);
		$n = new newsletter($c);

		$n->type = "html";
		$n->filename = $_SESSION['filename'];
		$n->subject = $subject;
		$n->language = $newsletter_language;

		$n->send();

		doHeader("Newsletter");

		// Nur für Testzwecke
		//echo "subject = " . $n->subject . "<br>n";
		//echo "filename = " . $n->filename . "<br>n";

		$time_needed = round($n->time_needed,4);

		echo $n->mails_sent . " emails sent in " . $time_needed . " seconds.<br>n";

	break;

	default:

		doHeader("Newsletter");

		$c = new client($_SESSION['username']);
		$m = new mailaddresses($c);

		$set_1 = $m->count_italian;  // italienische email-Adressen
		$set_2 = $m->count_german;   // deutsche email-Adressen
		$set_3 = $m->count_english;  // englische email-adressen

		$all = $set_1 + $set_2 + $set_3;  // Zahl aller email-Adressen
		$one_percent = $all/100;          // ein Prozent davon

		if ($one_percent > 0)
		{
			$percent_1 = round($set_1 / $one_percent,1);  // italienische email-Adressen in Prozent
			$percent_2 = round($set_2 / $one_percent,1);  // deutsche email-Adressen in Prozent
			$percent_3 = round($set_3 / $one_percent,1);  // englische email-Adressen in Prozent
		}
		else
		{
			$percent_1 = 0;
			$percent_2 = 0;
			$percent_3 = 0;
		}

		$query = "?size=60&set_1=" . $set_1 . "&set_2=" . $set_2 . "&set_3=" . $set_3;

		echo "<table border="0" cellspacing="5" cellpadding="5">n";
		echo "<tr>n";

		echo "<td>n";

		echo "<form action="newsletter.php" method="GET">n";
        echo "<table border="0" cellpadding="5">n";
        echo "<tr>n";
        echo "t<td bgcolor="#EEEEEE"><font color="#000000">Subject</font></td>n";
        echo "t<td bgcolor="#EEEEEE"><input type="text" name="subject" size="30"></td>n";
        echo "</tr>n";

        echo "<tr>n";
        echo "t<td bgcolor="#EEEEEE"><font color="#000000">Language</font></td>n";
        echo "t<td bgcolor="#EEEEEE">n";
        echo "t<select name="newsletter_language" size="1">n";
	    echo "t<option value="1">italian</option>n";
	    echo "t<option selected value="2">german</option>n";
	    echo "t<option value="3">english</option>n";
        echo "t</select>n";
        echo "t</td>n";
        echo "</tr>n";

        echo "<tr>n";
        echo "t<td bgcolor="#EEEEEE"><input type="hidden" name="action" value="obtain_template"></td>n";
        echo "t<td bgcolor="#EEEEEE"><input type="submit" value="Continue"></td>n";
        echo "</tr>n";

        echo "</table>n";

        echo "</form>n";

		echo "</td>n";

		echo "<td>n";

		echo "<p>email-addresses in database</p>n";

		echo "<table bgcolor="#000000" cellpadding="5">n";
		//echo "<tr>n";
		//echo "t<td colspan="2">n";
  		//echo "t<font face="arial, helvetica" size="-1" color="#FFFFFF">email-addresses in database</font><br>n";
		//echo "t<hr>n";
		//echo "t</td>n";
		//echo "</tr>n";
		//echo "<tr>n";
		echo "t<td valign="top"><img src="percent_gauge.php" . $query . ""</td>n";
		echo "t<td>n";
  		echo "t<font face="arial, helvetica" size="-1" color="#00FF00">italiant$set_1 ($percent_1%)</font><br>n";
  		echo "t<font face="arial, helvetica" size="-1" color="#FFFF00">germant$set_2 ($percent_2%)</font><br>n";
  		echo "t<font face="arial, helvetica" size="-1" color="#FF0000">englisht$set_3 ($percent_3%)</font><br>n";
  		echo "t<hr>n";
  		echo "t<font face="arial, helvetica" size="-1" color="#FFFFFF">total $all</font><br>n";
		echo "t</td>n";
		echo "</tr>n";
		echo "</table>n";

		echo "</td>n";

		echo "</tr>n";
		echo "</table>n";

}

?>

<p>
<a href="index.php">Back to main</a><BR>
</p>


</body>
</html>


Dort werden die includes dann NICHT gefunden.
Es kommt folgende Fehlermeldung:

Warning: require_once(Mail.php) [function.require-once]: failed to open stream: No such file or directory in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 25

Fatal error: require_once() [function.require]: Failed opening required 'Mail.php' (include_path='.:/usr/share/php') in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 25

Allerdings werden diese includes korrekt eingebunden, wenn ich meine Klasse, die diese verwenden soll mit einem seperaten Testprogramm verwende, welches nur aus der Shell aufgerufen wird.

Warum wird da je nach Art des Aufrufs (Browser vs. Shell) in unterschiedlichen Pfaden nach den Includes gesucht?

--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

04.01.2008, 12:16 Uhr

fr
Posts: 217
Nutzer
@Mad_Dog:

Ja, klar. Die Pfade sind ggfs anders.
Der Webserver läuft ja als anderer Benutzer und außerdem
falls Du eine Webseite aus dem Browser aufrufst(Stichwort
DocumentRoot und cgi-bin Verzeichnis des Apaches sind die
Pfade anders, als wenn Du ein Skript auf der Shell aufrufst
bzw. ein Skript ein anders Skript aufrufst.

[ - Antworten - Zitieren - Direktlink - ]

04.01.2008, 14:07 Uhr

Mad_Dog
Posts: 1944
Nutzer
@fr:

Ich muß also die shell-configs des Users ändern, unter dem Apache läuft?
PEAR hat also bei der Installation nur automatisch die Pfade für den User gesetzt, unter dem die Installation ablief?

Helf mir mal kurz auf die Sprünge! :glow:
--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

04.01.2008, 14:37 Uhr

fr
Posts: 217
Nutzer
@Mad_Dog:

Zitat:
Ich muß also die shell-configs des Users ändern, unter dem Apache läuft?

Nein, sollte nicht notwendig sein.

Diese Frage solltest Du am besten in einem PHP Forum stellen.

Schau mal wo
require_once("Mail.php");
require_once("Mail/mime.php");
die beiden Dateien bei Dir auf dem Server liegen.

Wo liegt die Datei:

require_once("offer_options.inc.php");

Du kannst ja mal einen Symlink für die Datei
Mail.php und das Verzeichnis Mail
in das Verzeichnis in der die Datei offer_options.inc.php
liegt anlegen und testen. Sollte dann gehen (aber nur
falls der Apche auf per Config Sysmlinks folgen darf)
=> ist nur zum testen da, nicht für die Produktion.

Geh mal auf diese Seite:
http://pear.php.net/
Dort wird Du sicherlich eine Menge Doku finden.

Ich habe habe keine Anhnung, wie Du PEAR installiert hast.
Erstell dir doch mal eine PHPInfo Seite:
http://de2.php.net/manual/en/function.phpinfo.php

Dann sieht Du die Konfig für dein PHP.

Gruß,

-FR

[ - Antworten - Zitieren - Direktlink - ]

04.01.2008, 14:52 Uhr

Mad_Dog
Posts: 1944
Nutzer
@fr:

Wenn ich die vollständigen Pfade für die Includes angebe, bekomme ich folgende Fehlermeldungen:

Warning: include() [function.include]: open_basedir restriction in effect. File(/usr/share/php/Mail.php) is not within the allowed path(s): (/var/kunden/webs/bergm/:/tmp/) in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 24

Warning: include(/usr/share/php/Mail.php) [function.include]: failed to open stream: Operation not permitted in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 24

Warning: include() [function.include]: Failed opening '/usr/share/php/Mail.php' for inclusion (include_path='/usr/share/php/') in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 24

Warning: include() [function.include]: open_basedir restriction in effect. File(/usr/share/php/Mail/mime.php) is not within the allowed path(s): (/var/kunden/webs/bergm/:/tmp/) in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 25

Warning: include(/usr/share/php/Mail/mime.php) [function.include]: failed to open stream: Operation not permitted in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 25

Warning: include() [function.include]: Failed opening '/usr/share/php/Mail/mime.php' for inclusion (include_path='/usr/share/php/') in /var/kunden/webs/bergm/Hotelprojekt/CLASSES/newsletter.inc.php on line 25

--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

04.01.2008, 18:14 Uhr

fr
Posts: 217
Nutzer
@Mad_Dog:

In diesen beiden Threads sollte die Lösung für dein Problem sein.

http://www.phpforum.de/archiv_59115_openbasedir@restriction@in@effect_anzeigen.html

http://www.ayom.com/topic-9583.html

Evnetuell mußt du den include Path erweitern
http://de.php.net/manual/en/function.set-include-path.php
und die Rechte im Dateisystem ändern/erweitern.
Auch deine php.ini würde ich mal anschauen.

Gruß,

-FR

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > PEAR include-Pfade [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.