• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Verständnisfrage

imoney91

Mitglied
Hallo Community,

ich habe folgende Library gefunden: OPL's EPUB library | Free Home & Education software downloads at SourceForge.net
Ich bin gerade dabei mich in dem Sample Beispiel (epubreader) einzuarbeiten.

Prinzipiell habe ich das Konzept verstanden, aber die Details verstehe ich noch nicht.
Meiner Meinung nach läuft es so ab:
1. index.php fordert vom User eine .epub Datei zum hochladen
2. beim Submitvorgang wird die "upload.php" aufgerufen.
3. upload.php prüft die Gültigkeit der .epub Datei.
upload.php zeigt Metainformationen der .epub Datei an.
upload.php referenziert beim Drücken des buttons auf die "read.php"
4. read.php zeigt dann den Inhalt an.

Ich möchte aber eine Version ohne diesen Uploadvorgang programmieren.
Im Zielverzeichnis sind etliche .epub Dateien vorhanden, sodass der Uploadvorgang nicht mehr gemacht werden muss.
Mir geht es nur um die Auswahl einer existierenden .epub Datei auf dem Server und ihre Anzeige.

Ich komme nicht darauf.
Kann mir jemand einen Hinweis geben?

schöne Grüße aus Bayern!

:D
 
upload.php referenziert beim Drücken des buttons auf die "read.php"

müsste heissen:

upload.php zeigt einen Button samt Link auf die "read.php" an.

Wenn du die Datei schon hast kannst du die ganze upload.php weglassen und schlicht bei read.php anfangen.
Du musst halt nur selber ein Formular bauen, von wo ein Link zur read.php samt Name der gewünschten Datei gesendet wird.
 
Hallo ich habe folgendes probiert. Ich habe eine index.html erstellt und ein Formular generiert.
In Form von Radio Boxen lass ich den User auswählen welche ePub er lesen möchte.
Wenn er auf den Button drückt, geht er mit action auf die read.php mit der get Methode.

ABER wie kann ich in der read.php genau den Pfad der ePub Datei mitliefern, damit er auch genau weiß, welche ePub Datei er nehmen muss?
Folgende index.html
<html> <head>
<title>FrontEnd ePub Auswal </title>
</head>

<body>
<form name="auswahl" action="read.php" method="get">
<p><strong>Waehle eine ePub aus!</strong></p>
<input type="radio" name="ePubName" value="1" /> Kesington Garden <br/>
<input type="radio" name="ePubName" value="2" /> Sample 3 <br/>
<input type="radio" name="ePubName" value="3" /> Stoker Dracula <br/>
<input type="radio" name="ePubName" value="4" /> Tolstoy - War And Peace<br/>
<br/>
<input type="submit" value="lesen" />
</form>
</body>
</html>

Und folgende read.php
<?php require_once('ebookRead.php');
require_once('ebookData.php');


if(!isset($_SESSION)){
session_start();
}
$ebookData = unserialize($_SESSION['esd']);
$ebook = new ebookRead($ebookData);
$spineInfo = $ebook->getSpine();


function buildToc($ebook){
$found = false;
$spineInfo = $ebook->getSpine();
for($x = 0;$x < count($spineInfo);$x+=1){
$content = $ebook->getContentById($spineInfo[$x]);
if($found)
break;
for($y = 0;$y < count($spineInfo);$y+=1){
$manItem = $ebook->getManifestById($spineInfo[$y]);
if(preg_match("/".$manItem->href."/", $content)){
$found = true;
break;
}
}
}
if(!$found){
echo "<h2>Table of Contents</h2><br />";
$toc = $ebook->getTOC();
for($x = 0;$x < count($spineInfo);$x+=1){
if(isset($toc)){
$cToc = $toc[$x];
$tag = substr($cToc->fileName, 0, strrpos($cToc->fileName, '.'));
echo "<a href=\"#".$tag."\" >".$cToc->na
function editToc($content, $ebook){
$spineInfo = $ebook->getSpine();
for($x = 0;$x < count($spineInfo);$x+=1){
$manItem = $ebook->getManifestById($spineInfo[$x]);
$tag = substr($manItem->href, 0,strrpos($manItem->href, '.'));
$content = str_replace($manItem->href, "#".$tag, $content);
}
return $content;
}
?>
<HTML>
<HEAD>
<TITLE>OPL's Open eBook Reader - <?php echo $ebook->getDcTitle();?></TITLE>
<meta name="author" content="Jacob Weigand">
</HEAD>
<BODY>
<?php
echo "<P ALIGN=LEFT STYLE=\"margin-bottom: 0in\">\n";
echo buildToc($ebook);
for($x = 0;$x < count($spineInfo);$x+=1){
$manItem = $ebook->getManifestById($spineInfo[$x]);
echo "<div id=\"section\">";
echo "<a name=".substr($manItem->href, 0,strrpos($manItem->href, '.'))." />\n";
echo editToc($content = $ebook->getContentById($spineInfo[$x]), $ebook);
echo "</div>\n";
}
echo "</P><br />\n";
if(is_file($_SESSION['efile']))
unlink($_SESSION['efile']);
?>
</BODY>
</HTML>

Viele Grüße
 
Zunächst sendest du ein Formular via GET Request ab verarbeitest die GET Daten aber garnicht (zumindest zeigst du uns dass nicht, da ja oben noch zwei Dateien inkludiert werden, wo das evtl. doch geschieht).
Via $_GET['ePubName'] bekommst du den Wert deines Radiobuttons in diesem Falle die Werte 1-4.

Entweder du gibst den Pfad zur eBook Datei als value an oder aber, wenn du nicht möchtest dass dieser von jedem eingesehen kann ordnest du in der read.php den ID's die entsprechenden Pfade via PHP zu. Dies kannst du über ein Switch/Case Konstrukt, oder aber einem, was meiner Meinung nach eleganter ist, Array lösen.

Grüße,
spaceCookie
 
Guten Tag :-o,

<?phprequire_once('ebookRead.php');
require_once('ebookData.php');

Hier wird nur auf die Klasse zugegriffen, die die .epub Datei in ihre Einzelteile zerlegt.
Ich habe es nun folgendermaßen umgesetzt:

...<body> <form enctype="multipart/form-data" action="read.php" method="get">
<p><strong>Waehle eine ePub aus!</strong></p>
<input type="radio" name="epubName" value="upload/kesingtonGarden.epub" /> Kesington Garden <br/>
<input type="radio" name="epubName" value="upload/sample3.epub" /> Sample 3 <br/>
<input type="radio" name="epubName" value="upload/stokerDracula.epub" /> Stoker Dracula <br/>
<input type="radio" name="epubName" value="upload/tolstoyWarAndPeace.epub" /> Tolstoy - War And Peace<br/>
<br/>
<input type="submit" value="lesen" />
</form>
</body>
...

In der read.php finde ich jedoch keine Abfrage einer Variable der vorher hochgeladenen epub.
Diese muss ich aber doch abändern, damit meine read.php mit meiner eigenen vorhandenen epub verarbeiten kann.
 
Okay weiter gehts. Du lädst keine Dateien mit der Form hoch, d.H. die Multipartform ist überflüssig. Eine normale reicht da aus.
Ich habe leider nicht die Zeit mich mit der Klasse und deren Logik zu befassen. Aber dem eBook Objekt werden $ebookData übergeben. Es wäre mal einen Blick wert wie genau diese aussehen müssen. Ich vermute mal dass du da ein Array übergeben musst welches mit etwas Glück den Pfad zum eBook enthalten muss. Zaubern kann ich allerdings nicht und auch eine Glaskugel habe ich nicht :D


Ergo: Sieh nach was $ebookData enthalten muss. Falls ein Pfad mit angegeben werden muss bekommst du ihn über dein zuvor abgesendetes Formular ($_GET['ePubName'])

~spaceCookie
 
Ich danke dir für deine schnelle und sympathische Hilfestellung!!! Ich habe mal gerade in die Klasse ebookData.class reingeschaut.
Wenn ich mich bei der OOP nicht täusche, dann kann ich eine Instanz eines Objektes erzeugen und nur die Attribute und Methoden ändern die ich brauche oder? Der Rest wird einfach von der Super Klasse übernommen oder?

Ich habe in der klasse nämlich eine public $epub gefunden mit folgender Doku: //Path on the server to the .epub file.
Somit hast du mit dem Pfad recht gehabt^^

Jetzt muss ich in der read.php Datei nur noch diesen Teil verstehen und umändern ( mit meiner eigenen Variable versehen )
$ebookData = unserialize($_SESSION['esd']); $ebook = new ebookRead($ebookData);
$spineInfo = $ebook->getSpine();

Das wäre mein nächster Schritt

:-ogruß
 
Vielen Dank für deine schnelle und sympathische Hilfestellung =)!!!
Ich habe mir jetzt mal die ebookData.php und ihre ebookData Klasse angeschaut.

Glücklicherweise gibt es eine Variable namens $epub mit folgender Doku: //Path on the server to the .epub file.
Soweit ich weiß kann man in der OOP für sich interessante Attribute oder Methoden überschreiben, der Rest kann getrost ignoriert werden oder?

Dann würde ich aus meinem Formular mit deinem Befehl ($_GET['ePubName']) den Pfad an $epub übergeben, somit wäre es geritzt.

Bei der Instanzerzeugung muss ich es schließlich noch ändern:
$ebookData = unserialize($_SESSION['esd']); $ebook = new ebookRead($ebookData);

$spineInfo = $ebook->getSpine();

soweit in Ordnung?

=)

Gruß
 
Poste doch bitte einmal was du bei folgender Ausgabe bekommst:
PHP:
var_dump(unserialize($_SESSION['esd']));

Und den Konstruktor von der ebookRead Klasse.

Edit: Was ich auch nicht verstehe ist, dass du Daten via Formular sendest, die eBook Informationen dann aber aus einer Session kommen.
 
ich hab mal in die Upload Datei (upload.php) reingeschaut und folgendes wird dort erstellt:
$ebook = new ebookRead($newname); $_SESSION['esd'] = serialize($ebook->getEBookDataObject());
$_SESSION['efile'] = $newname;
Hier wird erst was in die $_SESSION geschrieben und dann in der read.php ausgelesen
$ebookData = unserialize($_SESSION['esd']); $ebook = new ebookRead($ebookData);
$spineInfo = $ebook->getSpine();

Verstehe aber nicht wieso dann vorher ein Formular geschrieben worden ist -.-

Deine Ausgabe:
object(ebookData)#3 (54) { ["epub"]=> string(84) "/data/multiserv/users/810869/projects/1994640/www/backend/upload/stoker-dracula.epub" ["tempDir"]=> NULL ["contentFolder"]=> string(4) "OPS/" ["opfPath"]=> string(11) "OPS/epb.opf" ["toc"]=> string(11) "OPS/epb.ncx" ["xpgt"]=> NULL ["css"]=> array(2) { [0]=> string(16) "OPS/css/book.css" [1]=> string(21) "OPS/css/titlepage.css" } ["metadata"]=> NULL ["manifest"]=> NULL ["manifestData"]=> array(33) { [0]=> object(manifest)#103 (4) { ["id"]=> string(9) "titlepage" ["href"]=> string(9) "title.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [1]=> object(manifest)#102 (4) { ["id"]=> string(13) "epubbooksinfo" ["href"]=> string(17) "epubbooksinfo.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [2]=> object(manifest)#101 (4) { ["id"]=> string(11) "chapter-001" ["href"]=> string(15) "chapter-001.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [3]=> object(manifest)#100 (4) { ["id"]=> string(11) "chapter-002" ["href"]=> string(15) "chapter-002.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [4]=> object(manifest)#99 (4) { ["id"]=> string(11) "chapter-003" ["href"]=> string(15) "chapter-003.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [5]=> object(manifest)#98 (4) { ["id"]=> string(11) "chapter-004" ["href"]=> string(15) "chapter-004.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [6]=> object(manifest)#97 (4) { ["id"]=> string(11) "chapter-005" ["href"]=> string(15) "chapter-005.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [7]=> object(manifest)#96 (4) { ["id"]=> string(11) "chapter-006" ["href"]=> string(15) "chapter-006.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [8]=> object(manifest)#95 (4) { ["id"]=> string(11) "chapter-007" ["href"]=> string(15) "chapter-007.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [9]=> object(manifest)#94 (4) { ["id"]=> string(11) "chapter-008" ["href"]=> string(15) "chapter-008.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [10]=> object(manifest)#93 (4) { ["id"]=> string(11) "chapter-009" ["href"]=> string(15) "chapter-009.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [11]=> object(manifest)#92 (4) { ["id"]=> string(11) "chapter-010" ["href"]=> string(15) "chapter-010.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [12]=> object(manifest)#91 (4) { ["id"]=> string(11) "chapter-011" ["href"]=> string(15) "chapter-011.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [13]=> object(manifest)#90 (4) { ["id"]=> string(11) "chapter-012" ["href"]=> string(15) "chapter-012.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [14]=> object(manifest)#89 (4) { ["id"]=> string(11) "chapter-013" ["href"]=> string(15) "chapter-013.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [15]=> object(manifest)#88 (4) { ["id"]=> string(11) "chapter-014" ["href"]=> string(15) "chapter-014.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [16]=> object(manifest)#87 (4) { ["id"]=> string(11) "chapter-015" ["href"]=> string(15) "chapter-015.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [17]=> object(manifest)#86 (4) { ["id"]=> string(11) "chapter-016" ["href"]=> string(15) "chapter-016.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [18]=> object(manifest)#85 (4) { ["id"]=> string(11) "chapter-017" ["href"]=> string(15) "chapter-017.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [19]=> object(manifest)#84 (4) { ["id"]=> string(11) "chapter-018" ["href"]=> string(15) "chapter-018.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [20]=> object(manifest)#83 (4) { ["id"]=> string(11) "chapter-019" ["href"]=> string(15) "chapter-019.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [21]=> object(manifest)#82 (4) { ["id"]=> string(11) "chapter-020" ["href"]=> string(15) "chapter-020.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [22]=> object(manifest)#81 (4) { ["id"]=> string(11) "chapter-021" ["href"]=> string(15) "chapter-021.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [23]=> object(manifest)#80 (4) { ["id"]=> string(11) "chapter-022" ["href"]=> string(15) "chapter-022.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [24]=> object(manifest)#79 (4) { ["id"]=> string(11) "chapter-023" ["href"]=> string(15) "chapter-023.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [25]=> object(manifest)#78 (4) { ["id"]=> string(11) "chapter-024" ["href"]=> string(15) "chapter-024.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [26]=> object(manifest)#77 (4) { ["id"]=> string(11) "chapter-025" ["href"]=> string(15) "chapter-025.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [27]=> object(manifest)#47 (4) { ["id"]=> string(11) "chapter-026" ["href"]=> string(15) "chapter-026.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [28]=> object(manifest)#76 (4) { ["id"]=> string(11) "chapter-027" ["href"]=> string(15) "chapter-027.xml" ["type"]=> string(21) "application/xhtml+xml" ["fallback"]=> string(0) "" } [29]=> object(manifest)#65 (4) { ["id"]=> string(14) "title-page-css" ["href"]=> string(17) "css/titlepage.css" ["type"]=> string(8) "text/css" ["fallback"]=> string(0) "" } [30]=> object(manifest)#70 (4) { ["id"]=> string(8) "main-css" ["href"]=> string(12) "css/book.css" ["type"]=> string(8) "text/css" ["fallback"]=> string(0) "" } [31]=> object(manifest)#73 (4) { ["id"]=> string(14) "epubbooks-logo" ["href"]=> string(25) "images/epubbooks-logo.png" ["type"]=> string(9) "image/png" ["fallback"]=> string(0) "" } [32]=> object(manifest)#72 (4) { ["id"]=> string(3) "ncx" ["href"]=> string(7) "epb.ncx" ["type"]=> string(24) "application/x-dtbncx+xml" ["fallback"]=> string(0) "" } } ["spine"]=> NULL ["spineData"]=> array(29) { [0]=> string(9) "titlepage" [1]=> string(13) "epubbooksinfo" [2]=> string(11) "chapter-001" [3]=> string(11) "chapter-002" [4]=> string(11) "chapter-003" [5]=> string(11) "chapter-004" [6]=> string(11) "chapter-005" [7]=> string(11) "chapter-006" [8]=> string(11) "chapter-007" [9]=> string(11) "chapter-008" [10]=> string(11) "chapter-009" [11]=> string(11) "chapter-010" [12]=> string(11) "chapter-011" [13]=> string(11) "chapter-012" [14]=> string(11) "chapter-013" [15]=> string(11) "chapter-014" [16]=> string(11) "chapter-015" [17]=> string(11) "chapter-016" [18]=> string(11) "chapter-017" [19]=> string(11) "chapter-018" [20]=> string(11) "chapter-019" [21]=> string(11) "chapter-020" [22]=> string(11) "chapter-021" [23]=> string(11) "chapter-022" [24]=> string(11) "chapter-023" [25]=> string(11) "chapter-024" [26]=> string(11) "chapter-025" [27]=> string(11) "chapter-026" [28]=> string(11) "chapter-027" } ["spineToc"]=> string(3) "ncx" ["guide"]=> NULL ["guideData"]=> NULL ["tocData"]=> array(29) { [0]=> object(tocItem)#74 (2) { ["name"]=> string(10) "Title Page" ["fileName"]=> string(9) "title.xml" } [1]=> object(tocItem)#69 (2) { ["name"]=> string(21) "epubBooks Information" ["fileName"]=> string(17) "epubbooksinfo.xml" } [2]=> object(tocItem)#75 (2) { ["name"]=> string(9) "CHAPTER 1" ["fileName"]=> string(15) "chapter-001.xml" } [3]=> object(tocItem)#8 (2) { ["name"]=> string(9) "CHAPTER 2" ["fileName"]=> string(15) "chapter-002.xml" } [4]=> object(tocItem)#11 (2) { ["name"]=> string(9) "CHAPTER 3" ["fileName"]=> string(15) "chapter-003.xml" } [5]=> object(tocItem)#5 (2) { ["name"]=> string(9) "CHAPTER 4" ["fileName"]=> string(15) "chapter-004.xml" } [6]=> object(tocItem)#50 (2) { ["name"]=> string(9) "CHAPTER 5" ["fileName"]=> string(15) "chapter-005.xml" } [7]=> object(tocItem)#14 (2) { ["name"]=> string(9) "CHAPTER 6" ["fileName"]=> string(15) "chapter-006.xml" } ...}
 
Ich habe es zeitlich hinbekommen, er hat mir einmal die epub Datei im Container angezeigt!
Aber ohne den Code zu verändern gibt er mir nun diesen Fehler aus: (Es ging auch nur im Switch Case 2, ich dachte ich habe den Pfad falsch angegeben, aber die Variablen Übergabe an die Klasse scheint nicht zu funktionieren!
improper parameters input for the ebookRead class decleration.

Ich habe meine index.html nun so aufgebaut:
<form action="read.php"method="get"> <p><strong>Waehle eine ePub aus!</strong></p>
<input type="radio"name="epubName"value="1" /> Kesington Garden <br/>
<input type="radio"name="epubName"value="2" /> Sample 3 <br/>
<input type="radio"name="epubName"value="3" /> Stoker Dracula <br/>
<input type="radio"name="epubName"value="4" /> Tolstoy - War And Peace<br/>
<br/>
<input type="submit"value="lesen" />
</form>

und die read.php manipuliert:
//switch switch($_GET['epubName']) {
case 1:
$newname = "/data/multiserv/users/810869/projects/1994640/www/backend/upload/kesingtonGarden.epub";
echo'<p>1 wurde gewaehlt</p>';
break;
case 2:
$newname = "/data/multiserv/users/810869/projects/1994640/www/backend/upload/sample3.epub";
echo'<p>2 wurde gewaehlt</p>';
break;
case 3:
$newname = "/data/multiserv/users/810869/projects/1994640/www/backend/upload/stokerDracula.epub";
echo'<p>3 wurde gewaehlt</p>';
break;
case 4:
$newname = "/data/multiserv/users/810869/projects/1994640/www/backend/upload/tolstoyWarAndPeace.epub";
echo'<p>4 wurde gewaehlt</p>';
break;
default:
echo'Du hast vergessen eine ePub auszuwaehlen.';
}


//from var to session
$ebook = new ebookRead($newname);
$_SESSION['esd'] = serialize($ebook->getEBookDataObject());
$_SESSION['efile'] = $newname;




//from session to var
$ebookData = unserialize($_SESSION['esd']);
$ebook = new ebookRead($ebookData);
$spineInfo = $ebook->getSpine();

ich weiß^^, noch sehr unschön, aber mir gehts erst darum, dass es funktioniert

Gruß
 
Zuletzt bearbeitet:
@spaceCookie
Nochmal vielen Dank für deine Hilfe.

Ich habe es jetzt hinbekommen. Der Bug liegt an dem fehlerhaften Pfad.

Lösungsweg:
- Formular und Radiobutton mit Verweis auf read.php
- in read.php den Pfad aus der Switchanweisung (von den Radio button ) auslesen und in das Objektschreiben
- übergeben und epub aufrufen

PS: kleiner Hinweis:
Nach dem Hochladen oder Betrachten einer epub Datei wird die Datei wieder gelöscht. Bei einem erneuten Aufruf wird die Datei natürlich nicht gefunden und ein Fehler geworfen.
Blende die if Anweisung aus und die epub Datei im Verzeichnis bleibt erhalten.


if(is_file($_SESSION['efile']))
unlink($_SESSION['efile']);//löscht die epub wieder!

Schönen Tag noch!:-D
 
Zuletzt bearbeitet:
Zurück
Oben