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

drupal-funktionen aus externer php-datei aufrufen

Eingetragen von headkit (514)
am 31.01.2008 - 15:31 Uhr in
  • Modul-Entwicklung
  • Drupal 5.x

hi leute!

in meiner drupalseite habe ich einen flashbutton eingebaut, der ein php-skript triggert. ich möchte nun gerne aus dieser php-datei heraus drupalfunktionen benutzen. geht das?

danke!

‹ Registrierungformular Wie genau interagieren Module mit Drupal ? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: drupal-funktionen aus externer php-datei aufrufen

Eingetragen von traxer (1009)
am 31.01.2008 - 15:46 Uhr

Wechsle in das Verzeichnis deiner Drupal-Installation und rufe drupal_bootstrap auf.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

also mit include die

Eingetragen von headkit (514)
am 31.01.2008 - 16:00 Uhr

also mit include die bootstrap einbinden und dann kann ich nach dem aufruf "drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE)" die funktion "db_query()" benutzen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: also mit include die

Eingetragen von traxer (1009)
am 31.01.2008 - 16:10 Uhr
headkit schrieb

also mit include die bootstrap einbinden und dann kann ich nach dem aufruf "drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE)" die funktion "db_query()" benutzen?

Ja. Vorher aber noch mit chdir in das Verzeichnis der Drupal-Installation wechseln, sonst kann Drupal andere benötigte Dateien nicht finden.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

die datei liegt eh im

Eingetragen von headkit (514)
am 31.01.2008 - 16:18 Uhr

die datei liegt eh im root.

aber ist es nicht einfacher bzw. schneller, die include-dateien einzeln einzubinden? ich kann doch z.b. auch direkt "database.inc" inkludieren.
oder?

  • Anmelden oder Registrieren um Kommentare zu schreiben

funktioniert jedenfalls

Eingetragen von headkit (514)
am 31.01.2008 - 16:35 Uhr

funktioniert jedenfalls wunderbar - vielen dank!

  • Anmelden oder Registrieren um Kommentare zu schreiben

kannst du mir zufällig auch

Eingetragen von headkit (514)
am 31.01.2008 - 16:36 Uhr

kannst du mir zufällig auch sagen, wie ich per PHP einen dateidownload anstoße?
danke!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: kannst du mir zufällig auch

Eingetragen von traxer (1009)
am 31.01.2008 - 17:40 Uhr
headkit schrieb

... per PHP einen dateidownload anstoße[n]?

<?php
header
("Location: $url");
?>

$url musst du durch die URL der Datei ersetzen. Du musst die absolute URL nehmen, also <schema>:<schemaspezifischer_teil>.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich hatte es so probiert,

Eingetragen von headkit (514)
am 31.01.2008 - 19:09 Uhr

ich hatte es so probiert, das klappt aber leider nicht.

<?php
       
// required for IE, otherwise Content-disposition is ignored
       
if(ini_get('zlib.output_compression'))
         
ini_set('zlib.output_compression', 'Off');
       
       
// addition by Jorg Weske
       
$file_extension = strtolower(substr(strrchr($filepath,"."),1));
        echo
"&bestaetigung=MIME:".$file_extension." \n&";
       
        if(
$filepath == "" )
        {
          echo
"...";
          exit;
        } elseif ( !
file_exists( $filepath ) )
        {
          echo
"...File not found";
          exit;
        };
        switch(
$file_extension )
        {
          case
"pdf": $ctype="application/pdf"; break;
          case
"exe": $ctype="application/octet-stream"; break;
          case
"zip": $ctype="application/zip"; break;
          case
"doc": $ctype="application/msword"; break;
          case
"xls": $ctype="application/vnd.ms-excel"; break;
          case
"ppt": $ctype="application/vnd.ms-powerpoint"; break;
          case
"gif": $ctype="image/gif"; break;
          case
"png": $ctype="image/png"; break;
          case
"jpeg":
          case
"jpg": $ctype="image/jpg"; break;
          default:
$ctype="application/force-download";
        }
       
header("Pragma: public"); // required
       
header("Expires: 0");
       
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
       
header("Cache-Control: private",false); // required for certain browsers
       
header("Content-Type: ".$ctype);
       
       
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
       
header("Content-Disposition: attachment; filename=\"".basename($filepath)."\";" );
       
header("Content-Transfer-Encoding: binary");
       
header("Content-Length: ".filesize($filepath));
       
readfile($filepath);
        exit();
?>

warum weiß ich nicht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

also würde das dann auch so

Eingetragen von headkit (514)
am 31.01.2008 - 19:13 Uhr

also würde das dann auch so gehen:

<?php
header
("Location: ".$url);
?>

oder?

und vor allem, wo ist da der unterschied?

  • Anmelden oder Registrieren um Kommentare zu schreiben

headkit schrieb

Eingetragen von traxer (1009)
am 31.01.2008 - 20:02 Uhr
headkit schrieb

<?php
 
// addition by Jorg Weske
 
$file_extension = strtolower(substr(strrchr($filepath,"."),1));
  echo
"&bestaetigung=MIME:".$file_extension." \n&";
?>

Es ist mir schleierhaft, was das soll. IMHO gehört es da nicht hin.

headkit schrieb

<?php
 
if( $filepath == "" )
  {
    echo
"...";
    exit;
  } elseif ( !
file_exists( $filepath ) )
  {
    echo
"...File not found";
    exit;
  };
?>

Dann solltest du aber auch so nett sein, das dem Browser mitzuteilen (nicht nur dem Benutzer):

<?php
header
('HTTP/1.0 404 Not Found');
?>

headkit schrieb

<?php
 
switch( $file_extension )
  {
   
// ... Lots of case-Statements ausgeschnitten ...
 
}
?>

Dafür gibt es bessere Methoden. Wenn die zu liefernde Datei mit Drupal hochgeladen wurde, dann steht der richtige Content-Type Header in der Datenbank.

headkit schrieb

<?php
  header
("Cache-Control: private",false); // required for certain browsers
?>

Insbesondere IE6

headkit schrieb

<?php
 
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
 
header("Content-Disposition: attachment; filename=\"".basename($filepath)."\";" );
?>

Es genügt normalerweise nicht, einfach Anführungszeichen drumherumzupacken. Eigentlich muss der Dateiname laut RFC2183, RFC2045 und RFC822 aufgebaut sein. Diese RFCs sagen unter anderem, das Dateinamen mit Leerzeichen nicht in Anführungszeichen eingeschlossen werden müssen.

headkit schrieb

also würde das dann auch so gehen:

<?php
header
("Location: ".$url);
?>

oder?

Nun ja, es kommt darauf an, was du mit "dateidownload anstoßen" meinst. Im Lichte deines letzten Beitrages meinst du wohl etwas anderes, als ich gedacht habe.

Für den Anfang schlage ich vor, sich solide PHP-Kenntnisste anzueignen. Insbesondere die Unterscheidung zwischen doppelten und einfachen Anführungszeichen bewegt micht zu glauben, daß es bei dir hauptsächlich dort mangelt.

headkit schrieb

warum weiß ich nicht.

Ja nee, is klar. Sonst hättest du nicht gefragt. Kannst du mir etwas genaueres über die Symptome sagen?

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

nuja, bin kein php-profi,

Eingetragen von headkit (514)
am 31.01.2008 - 20:39 Uhr

nuja, bin kein php-profi, sonst würd ich mich da nicht so durchhangeln.
das mit den anführungszeichen krieg ich aber schon hin, danke. ;-)

das obige skript hab ich mir aus verschiedenen foren zusammenkopiert. ich hab verschiedene versionen ausprobiert, die sich im prinzip aber alle nicht so sehr unterscheiden. das auseinanderpflücken macht hier jetzt nicht wirklich sinn.
die echos gehen an mein flashfile zurück.

das skript, das eigentlich funktionieren sollte ist folgendes:

<?php
   
include_once "includes/bootstrap.inc";
   
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);

   
$rstrct_FID = $_POST[varFID];
   
$rstrct_UID = $_POST[varUID];
       
   
$query = db_query("SELECT filepath FROM {files} WHERE fid = %d",$rstrct_FID);

    if(
$result = db_fetch_array($query)){
        include_once
"includes/file.inc";
        include_once
"includes/unicode.inc";
       
       
$download_filepath = $result[filepath];   
       
$filepath = file_create_path($download_filepath);
       
$fileurl = file_create_url($download_filepath);
       
       
$filename = mime_header_encode(basename($filepath));
           
$size = filesize($filepath);
           
        return array(
               
'Content-Type: application/octet-stream',
               
'Content-Length: ' . $size,
               
'Content-Disposition: attachment; filename=' . $filename,
               
'Content-Transfer-Encoding: binary'
           
);
    }
        */
?>

wie es dann weitergehen soll - keine ahnung.
aber mach mich nicht gleich wieder fertig...
8-)

danach hab ich aus dem www.php.net folgendes skript probiert

<?php
        header
("Pragma: public");
       
header("Expires: 0");
       
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
       
header("Cache-Control: private",false);
       
       
$ext = strToLower(substr($filename,strlen($filename)-3, 3));
       
        if (
$ext == "mp3" ) { header("Content-Type: audio/x-mp3"); }
        else if (
$ext == "jpg") { header("Content-Type: image/jpeg"); }
        else if (
$ext == "gif") { header("Content-Type: image/gif"); }
        else if (
$ext == "zip") { header("Content-Type: application/zip"); }
        else if (
$ext == "png") { header("Content-Type: image/png"); }
        else if (
$ext == "swf") { header("Content-Type: application/x-shockwave-flash"); }
        else if (
$ext == "flv") { header("Content-Type: video/flv"); }
       
       
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
       
header("Content-Transfer-Encoding: binary");
       
header("Content-Length: ".$size);
       
header( "Content-Description: File Transfer");
       
       
readfile($filepath); */
?>

nix funzt.
kann doch nicht so schwer sein!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: nuja, bin kein php-profi,

Eingetragen von traxer (1009)
am 01.02.2008 - 03:06 Uhr
headkit schrieb

kann doch nicht so schwer sein!

Doch, es ist so schwehr. Du spielst gerade mit 4 verschiedenen Spezifikationen herum (die 3 oben genannten RFCs plus RFC 2616), jede davon ca 100 Seiten dick. Es ist kein Wunder, wenn es nicht auf Anhieb funktioniert.

Was ich eigentlich vermisse, ist eine Fehlerbeschreibung. Du willst, das der Benutzer eine Datei herunteladen kann, soweit habe ich dich verstanden. Es funktioniert nicht, ok, das kann sich in vielen Varianten äußern:

  • Es wird kein Dialog angezeigt, der zum Speichern der Datei auffordert
  • Der Dialog wird angezeigt, die Datei ist aber leer
  • Die Datei ist nicht leer, kann aber mit dem Programm, das eigentlich dazu gedacht ist, nicht geöffnet werden

Wo ist das Problem? Alle drei Symptome können auftreten und haben unterschiedliche Ursachen.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Es wird kein Dialog angezeigt, der zum Speichern der Datei auffo

Eingetragen von headkit (514)
am 01.02.2008 - 14:32 Uhr

Es wird kein Dialog angezeigt, der zum Speichern der Datei auffordert.
Der Fiddler schimpft aber auch nicht. er sagt nur "PK"
ich lade das jetzt mal hoch und teste, ob das online doch funktioniert.

...

RESPONSE HEADERS
HTTP/1.1 200 OK

Entity
Content-Length: 89683
Content-Type: octet/stream

Content-disposition: attachment; filename=files/path_to_file/filename.zip;

No Proxy-Authenticate Header is present.
No WWW-Authenticate Header is present.
Response headers do not contain caching-related directives.
No P3P Header is present.
-
funktioniert aber auch nicht...

  • Anmelden oder Registrieren um Kommentare zu schreiben

nuja, schick ich den pfad

Eingetragen von headkit (514)
am 02.02.2008 - 17:05 Uhr

nuja, schick ich den pfad halt zu flash zurück und öffne von da den downloaddialog.
was solls...

  • Anmelden oder Registrieren um Kommentare zu schreiben

hm, scheinbar verhindert

Eingetragen von headkit (514)
am 04.02.2008 - 15:50 Uhr

hm, scheinbar verhindert drupal auch hier das öffnen des download-dialoges.
warum verstehe ich nicht...
also weiter hier: http://www.drupalcenter.de/node/8074

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 3 Tagen
  • Hey danke
    vor 2 Wochen 3 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 4 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 6 Tagen
  • In der entsprechenden View
    vor 3 Wochen 6 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 6 Tagen
  • gelöst
    vor 6 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20458

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» 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 24 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