Table of Contents

Multimedia: Kopieren einer SWF Datei in ein nicht geschütztes Verzeichnis

Wird der Multimedia-CP verwendet um eine intern geladene (Dateizentrale) Flash-SWF-Datei anzuzeigen, wird die Datei im Frontend nicht angezeigt.

Der Grund für dieses Verhalten ist der Schutz des Verzeichnisses ”/filearchive/” durch eine .htaccess Datei.

Es gibt zwei Lösungen für dieses Problem:

1. Die .htaccess Datei deaktivieren
2. Script: Kopieren der gewünschten Datei in ein nicht geschütztes Verzeichnis und bereitstellen der Datei aus diesem Verzeichnis heraus

Ich spreche hier die zweite Methode an.


Beschreibung:

Script:

Während des CP Aufrufs ermittelt das Script den relevanten Dateiname aus dem HTML-Quelltext und sucht diese Datei im nicht geschützten Verzeichnis. Wenn diese Datei dort nicht existiert, wird eine Kopie der Datei aus ”/filearchive/” in ”/content/tmp/” angelegt und der HTML Quelltext an den neuen Verzeichnisnamen angepasst.

<note> Wenn die Originaldatei in ”/filearchive/” gelöscht wird, bleibt die Kopie in ”/content/tmp/” erhalten !!</note>



Docu: –
Forum: Flash swf file doesn't display in multimedia content part

Autor: K.Heermann (flip-flop) http://planmatrix.de
CMS Version: >= 1.4x
Version: V1.0 (07.09.2010)
Bedingung:/config/phpwcms/conf.inc.php



Beispieltemplate:

Für eine bessere Identifizierung und Laufzeitoptimierung muss <!--COPY_SWF//--> in das Template eingesetzt werden.

Datei: template/inc_cntpart/multimedia/copy_swf.tmpl

[MULTIMEDIA]
<!--COPY_SWF//-->
    <div class="multimedia">
        {MULTIMEDIA}
    </div>
[/MULTIMEDIA]


PHP:

Datei: /template/inc_script/frontend_init/cp_trig_multimedia_copy_swf.php

cp_trig_multimedia_copy_swf.php

<?php
// -------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");}
// -------------------------------------------------------------------------------------------
 
/**
 * *****************************************************************************
 * SWF file: the files in the directory /filearchive/ are protected by an htaccess file
 * If you want to give up this protection, this script can be used.
 * Copy SWF file from folder /filearchive/ into the folder /content/tmp/
 * V1.0  07.09.10 K.Heermann  http://planmatrix.de
 *
 * ---- Template ------------------------------------------
 * Please insert <!--COPY_SWF//--> into your multimedia
 * template for a better identification of this CP.
 *
 * folder: /template/inc_cntpart/multimedia/
 *
 *
[MULTIMEDIA]
<!--COPY_SWF//-->
    <div class="multimedia">
        {MULTIMEDIA}
    </div>
[/MULTIMEDIA]
 *
 * *****************************************************************************
*/
 
 
function CP_MULTIMEDIA_COPY_SWF($text, & $data) {
 
    // CP type multimedia = 9
    if( $data['acontent_type'] == 9 AND strpos($text, '<!--COPY_SWF//-->') ) {
 
 
        // Is there any swf file in source?
        if (preg_match('@value="'.PHPWCMS_FILES.'(.*?)\.swf"@i', $text, $filename)) {
 
            // Yes it is and we have catched the filename
            if ($filename[1] ) {
 
            $source = PHPWCMS_FILES.$filename[1].'.swf';    // Source dir and filename
            $target = 'content/tmp/'.$filename[1].'.swf';    // Destination dir and filename
            $error = false;
 
                // file already exists in destination dir?
                if (!is_file ($target)) {
 
                    // No, please copy into
                    if (!copy($source, $target)) {
                        $error = true;
                    }
                }
 
                // Change folder in html source
                $text = preg_replace('@="'.$source.'"@i','="'.$target.'"',$text);
 
            }
 
        }
 
 
        if ($error)
            str_replace('<!--COPY_SWF//-->','Error while copying the file!!<br>',$text);
        else
            str_replace('<!--COPY_SWF//-->','',$text);
 
 
    }
 
    return $text;
 
} // ---- END function
 
register_cp_trigger('CP_MULTIMEDIA_COPY_SWF');
 
?>