2008-01-04, 11:08 h
Mad_Dog
Posts: 1944
User
|
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
[ - Answer - Quote - Direct link - ]
|