Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Dateien mit PHP zusammenfügen (wie copy /b bei DOS)

Eingetragen von tick313 (41)
am 16.01.2010 - 22:54 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo zusammen,

ich möchte gerne per Code bestimmte Dateien zusammengefügt als eine Datei per Download anbieten.

Unter DOS wäre das der Befehl:
copy /b Datei_1 + Datei_2 + Datei_3 fertige_Datei

Ich habe nun eine PHP-Datei, mit der ich dies umsetzen kann:

   header('Cache-control: must-revalidate, post-check=0, pre-check=0');
   header('Pragma: anytextexeptno-cache', true);
   header('Content-type: application/force-download');
  // header('Content-Type: application/octet-stream');
   header('Content-Transfer-Encoding: Binary');
   header('Vary: User-Agent');
$Contentlength = filesize($file1) + filesize($file2) + mb_strlen( $configTxt, '8bit');


header("Content-length: $Contentlength");
   header('Content-disposition: attachment; filename='.$downloadFilename);

   readfile($file1);
echo $configTxt;
    readfile($file2);

Wenn ich die PHP-Datei direkt aufrufe, funktioniert auch die heruntergeladene Datei.
Wenn ich den PHP-Code aber im Node eingebe, dann ist die heruntergeladene Datei nicht ausführbar, da die ersten Zeilen in der Datei mit HTML-Inhalt versehen sind.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" dir="ltr">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...

Wie bekomme ich meine gewünschte Funktion am besten hin?

Grüße
tick313

‹ Flash Drupal Datenbankkommunikation [gelöst] Filter greift bei eigener Validate Funktion nicht ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Modul

Eingetragen von stBorchert (6003)
am 17.01.2010 - 00:22 Uhr

Schreib Dir ein Modul, das unter einem bestimmten Pfad die entsprechenden Daten ausgibt.

 Stefan

--
Sei nett zu Deinem Themer!

  • Anmelden oder Registrieren um Kommentare zu schreiben

danek für die schnelle

Eingetragen von tick313 (41)
am 17.01.2010 - 00:41 Uhr

danke für die schnelle Antwort.

Ja mein Wunsch ist ja ein (Block-)Modul zu entwerfen, in dem ich die gewünschte Funktion implementiere. Bin allerdings noch ein wenig in den Anfängen, und weiß leider nicht, wie ich das genau umsetzen soll. Hast Du einen Ansatz für mich? Mache ich das am besten mit fwrite()?

Grüße
tick313

  • Anmelden oder Registrieren um Kommentare zu schreiben

<?php 

Eingetragen von bspellmeyer (37)
am 19.01.2010 - 22:06 Uhr

<?php
  header
('Cache-control: must-revalidate, post-check=0, pre-check=0');
 
header('Pragma: anytextexeptno-cache', true);
 
header('Content-type: application/force-download');
 
// header('Content-Type: application/octet-stream');
 
header('Content-Transfer-Encoding: Binary');
 
header('Vary: User-Agent');
 
$Contentlength = filesize($file1) + filesize($file2) + mb_strlen( $configTxt, '8bit');

 
header("Content-length: $Contentlength");
 
header('Content-disposition: attachment; filename='.$downloadFilename);

 
readfile($file1);
  echo
$configTxt;
 
readfile($file2);
?>

Wenn du genau diesen Code in einem Page Callback einfügst, sollte dir beim Aufruf des Callbacks der gewünschte Download präsentiert werden.

Für das Einrichten eines Page Callbacks könnte http://api.drupal.org/api/drupal/developer--examples--page_example.module/6 hilfreich sein.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, vielen Dank für den

Eingetragen von tick313 (41)
am 20.01.2010 - 02:26 Uhr

Hallo,

vielen Dank für den Tipp.

Wenn also jemand auf den Download-Button klickt, dann soll ein Page Callback mit dem genannten Inhalt aufgerufen werden?

Leider ist der Link, den Du mir gegeben hast tot. Welchen Code nutze ich für den Page Callback? In der Suchfunktion der API finde ich nichts.

Grüße
tick313

  • Anmelden oder Registrieren um Kommentare zu schreiben

Page Callback

Eingetragen von bspellmeyer (37)
am 20.01.2010 - 10:23 Uhr

http://api.drupal.org/api/drupal/developer--examples--page_example.module/6

Der Link sollte jetzt aber funktionieren ;) Dort findest du ein Beispielmodul für die Einrichtung eines Page Callbacks.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja der Link hat

Eingetragen von tick313 (41)
am 21.01.2010 - 02:25 Uhr

Ja der Link hat funktioniert. Vielen Dank.

Ich bin aber anscheinend leider etwas schwer von Begriff :-(

Folgendes Modul habe ich nun erstellt:

<?php
function page_test_baz() {


$configTxt = "....";
$file1="... ";
$file2="... ";
header('Cache-control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: anytextexeptno-cache', true);
header('Content-type: application/force-download');
// header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: Binary');
header('Vary: User-Agent');
$Contentlength = filesize($file1) + filesize($file2) + mb_strlen( $configTxt, '8bit');

header("Content-length: $Contentlength");
header('Content-disposition: attachment; filename='.$downloadFilename);

readfile($file1);
echo
$configTxt;
readfile($file2);
}
?>

In einem node rufe ich dann die Funktion
page_test_baz();
auf.

Doch auch hier bekomme ich eine Datei, die zuerst mit dem HTML-Code anfängt. :-(

Was mache ich falsch?

Grüße
tick313

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, sorry für uppen,

Eingetragen von tick313 (41)
am 23.01.2010 - 22:49 Uhr

Hallo,

sorry für uppen, aber ich komme leider nicht weiter, und dieser Schritt ist sehr wichtig für das Projekt.

Wenn ich den Page recall mit meiner Funktion aufrufe, dann fängt der Inhalt der heruntergeladenen Datei so an:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
    <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="/themes/sky/favicon.ico" type="image/x-icon" />
      <title>testen | meineSeite.de</title>
      <link type="text/css" rel="stylesheet" media="all" href="/sites/all/modules/admin_menu/admin_menu.css?l" />
...

Erst danach folgt der Inhalt von $file1.

Gibt es irgendeinen Trick um das zu umgehen?

Vielen Dank und viele Grüße
tick313

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, zu deinem

Eingetragen von bspellmeyer (37)
am 24.01.2010 - 11:26 Uhr

Hallo,

zu deinem Page-Callback page_test_baz() benötigst du noch einen Menu-Eintrag im hook_menu(). Angenommen, dein Modul heißt page_test, dann lautet der Eintrag wie folgt (der Code ist fast 1zu1 aus dem oben verlinkten Beispiel-Modul geklaut):

<?php
function page_test_menu() {
 
$items['bar/baz'] = array(
   
'title' => 'Baz',
   
'page callback' => 'page_test_baz',
   
'access arguments' => array('access content'),
   
'type' => MENU_CALLBACK,
  );

  return
$items;
}
?>

In deiner Node fügst du dann nicht direkt die Funktion page_test_baz() ein, sondern einen Link zum Menu-Eintrag: http://www.example.org/bar/baz oder http://www.example.org/?q=bar/baz

Beim Aufruf des Links sollte dir die Datei zum Download angeboten werden.

Wichtig: Nach dem Anlegen eines neuen Menu-Eintrags muss der Drupal-Cache geleert werden: Verwalten -> Leistung -> Cache leeren

Grüße,
Benedikt

--
http://www.twitter.com/bspellmeyer

  • Anmelden oder Registrieren um Kommentare zu schreiben

DANKE!

Eingetragen von tick313 (41)
am 24.01.2010 - 14:27 Uhr

Super!!! Vielen vielen Dank.

Ich habe noch immer nicht die Denkweise mit den Hooks verinnerlicht. Zudem hatte ich mich nur auf die Funktion page_test_baz konzentriert, und übersehen, dass das ganze über einen neuen Menueintrag aufgerufen wird.

Jetzt muss ich nur noch verhindern, dass /bar/baz direkt von jedem aufgerufen werden kann, sondern nur, wenn man über den Link aus der vorherigen Seite klickt. Dann ist alles perfekt.

Viele Grüße
tick313

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • lstin tombent homophonic wikke
  • Rolle erstellen nicht zu finden
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
Weiter

Neue Kommentare

  • Rollen
    vor 1 Tag 22 Stunden
  • Inzwischen sind wir bei
    vor 1 Woche 5 Tagen
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Woche 6 Tagen
  • melde mich mal wieder, da ich
    vor 9 Wochen 3 Tagen
  • Hey danke
    vor 9 Wochen 4 Tagen
  • Update: jetzt gibt's ein
    vor 9 Wochen 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 10 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 10 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 10 Wochen 6 Tagen
  • In der entsprechenden View
    vor 10 Wochen 6 Tagen

Statistik

Beiträge im Forum: 250238
Registrierte User: 20465

Neue User:

  • FoxPiola
  • ocvk2810
  • marouane.blel

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 23 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association