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 - 23: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 - 01: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 - 01: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 - 23: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 - 03: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 - 11: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 - 03: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 - 23: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 - 12: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 - 15: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

  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • Was für einen Server benutzt
    vor 4 Tagen 19 Stunden
  • Wenn die Subdomain auf
    vor 6 Tagen 17 Stunden
  • ordnerstruktur
    vor 1 Woche 4 Stunden
  • Die Subdomain muß auf den
    vor 1 Woche 2 Tagen
  • Verwende doch das Tag dafür,
    vor 4 Wochen 4 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 3 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 3 Tagen
  • Ich habe ja keine Angst vor
    vor 5 Wochen 6 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 6 Wochen 1 Tag
  • Vielen Dank erst einmal, aber
    vor 6 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250289
Registrierte User: 20513

Neue User:

  • Scottteday
  • MichaelPeeno
  • Pavlotog

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 21 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