WordPress plugin letöltési probléma
2015-02-15T02:17:30+01:00
2015-02-15T17:33:30+01:00
2022-08-09T10:20:31+02:00
thetester
Hello!!

Van egy ilyen pluginem
WP Document Revisions

amit WP 4.1; PHP5.4.28 alatt szeretnék elindítani:

Már addig eljutottam, hogy beállítottam, mindent feltölt hibátlanul (letöltöttem a feltöltött fájlokat és tartalomra összehasonlítottam), de amikor a weboldalról próbálom meg letölteni, akkor azt írja, hogy hibás (corrupt) a fájl.

Mi lehet a gondja, mit nézzek meg??!




<?php
/*
Plugin Name: WP Document Revisions
Plugin URI: WP Document Revisions - Document Management & Version Control for WordPress >> Ben Balter
Description: A document management and version control plugin for WordPress that allows teams of any size to collaboratively edit files and manage their workflow.
Version: 2.0.0
Author: Ben Balter
Author URI: Ben Balter >> Government evangelist, attorney, open source developer
License: GPL3
*/

/*  WP Document Revisions
 *
 *  A document management and version control plugin for WordPress that allows
 *  teams of any size to collaboratively edit files and manage their workflow.
 *
 *  Copyright (C) 2011-2014 Ben Balter  ( ben@balter.com -- Ben Balter >> Government evangelist, attorney, open source developer )
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  @copyright 2011-2014
 *  @license GPL v3
 *  @version 2.0.0
 *  @package WP_Document_Revisions
 *  @author Ben Balter <ben@balter.com>
 */

set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/includes');
require_once "HTTP/WebDAV/Server.php";

class Document_Revisions extends HTTP_WebDAV_Server {
 static $instance;
 static $key_length = 32;
 static $meta_key   = 'document_revisions_feed_key';
 public $version = '2.0.0';

 /**
  * Initiates an instance of the class and adds hooks
  * @since 0.5
  */
 function __construct() {

  self::$instance = &$this;

  //admin
  add_action( 'init', array( &$this, 'admin_init' ) );
  add_action( 'init', array( &$this, 'i18n' ), 5 );

  //CPT/CT
  add_action( 'init', array( &$this, 'register_cpt' ) );
  add_action( 'init', array( &$this, 'register_ct' ), 15 ); //note: priority must be > 11 to allow for edit flow support
  add_action( 'admin_init', array( &$this, 'initialize_workflow_states' ) );
  register_activation_hook( __FILE__, array( &$this, 'add_caps' ) );
  add_filter( 'the_content', array( &$this, 'content_filter' ), 1 );
  add_action( 'wp_loaded', array( &$this, 'register_term_count_cb' ), 100, 1 );

  //rewrites and permalinks
  add_filter( 'rewrite_rules_array' , array( &$this, 'revision_rewrite' ) );
  add_filter( 'init', array( &$this, 'inject_rules' ) );
  add_action( 'post_type_link', array(&$this, 'permalink'), 10, 4 );
  add_action( 'post_link', array(&$this, 'permalink'), 10, 4 );
  add_filter( 'template_include', array(&$this, 'serve_file'), 10, 1 );
  add_action( 'after_setup_theme', array(&$this, 'auth_webdav_requests'));
  add_action( 'template_redirect', array(&$this, 'check_webdav_requests'));
  add_filter( 'serve_document_auth', array( &$this, 'serve_document_auth'), 10, 3 );
  add_action( 'parse_request', array( &$this, 'ie_cache_fix' ) );
  add_filter( 'query_vars', array(&$this, 'add_query_var'), 10, 4 );
  register_activation_hook( __FILE__, 'flush_rewrite_rules' );
  add_filter( 'default_feed', array( &$this, 'hijack_feed' ), 10, 2);
  add_action( 'do_feed_revision_log', array( &$this, 'do_feed_revision_log' ) );
  add_action( 'template_redirect', array( $this, 'revision_feed_auth' ) );
  add_filter( 'get_sample_permalink_html', array(&$this, 'sample_permalink_html_filter'), 10, 4);
  add_filter( 'wp_get_attachment_url', array( &$this, 'attachment_url_filter' ), 10, 2 );
  add_filter( 'image_downsize', array( &$this, 'image_downsize'), 10, 3 );
  add_filter( 'document_path', array( &$this, 'wamp_document_path_filter' ), 9, 1 );
  add_filter( 'redirect_canonical', array( &$this, 'redirect_canonical_filter' ), 10, 2 );

  //RSS
  add_filter( 'private_title_format', array( &$this, 'no_title_prepend' ), 20, 1 );
  add_filter( 'protected_title_format', array( &$this, 'no_title_prepend' ), 20, 1 );
  add_filter( 'the_title', array( &$this, 'add_revision_num_to_title' ), 20, 1 );

  //uploads
  add_filter( 'upload_dir', array( &$this, 'document_upload_dir_filter' ), 10, 2);
  add_filter( 'attachment_link', array( &$this, 'attachment_link_filter'), 10, 2);
  add_filter( 'wp_handle_upload_prefilter', array(&$this, 'filename_rewrite' ) );
  add_filter( 'wp_handle_upload', array( &$this, 'rewrite_file_url' ), 10, 2);

  //locking
  add_action( 'wp_ajax_override_lock', array( &$this, 'override_lock' ) );

  //cache
  add_action( 'save_post', array( &$this, 'clear_cache' ), 10, 1 );

  //edit flow
  add_action( 'init', array( &$this, 'edit_flow_support' ), 11 );
  add_action( 'init', array( &$this, 'use_workflow_states' ), 50 );

  //load front-end features (shortcode, widgets, etc.)
  include dirname( __FILE__ ) . '/includes/front-end.php';
  new Document_Revisions_Front_End( $this );

 }


 ###################################################
 #
 # Support some basic WebDav requests
 #
 ###################################################

 function auth_webdav_requests($post) {
  $request_method = $_SERVER['REQUEST_METHOD'];

  // OPTIONS must always be unauthenticated
  if ($request_method == 'OPTIONS') {
   nocache_headers();
   parent::http_OPTIONS();
   header("Allow: OPTIONS GET POST PUT HEAD LOCK");
   header("DAV: 1,2");
   status_header( 200 );
   die();
  }

  $webdav_methods = array( "LOCK", "PUT" );
  $private_checked_methods = array( "GET", "HEAD" );

  if ( in_array( $request_method, $webdav_methods ) || ( in_array( $request_method, $private_checked_methods ) && $this->is_webdav_client() ) ) {
   $this->basic_auth();
  }
 }

 function is_webdav_client() {
  $client = $_SERVER['HTTP_USER_AGENT'];
  if ( strpos( $client, 'Office' ) !== false ) {
   return true;
  }
  if ( strpos( $client, 'DAV' ) !== false ) {
   return true;
  }
  if ( strpos( $client, 'cadaver' ) !== false ) {
   return true;
  }
  return false;
 }

 /**
  * Check for WebDav request types and handle them
  */
 function check_webdav_requests() {
  global $post;
  if ( $post ) {
   $request_method = $_SERVER['REQUEST_METHOD'];
   switch ( $request_method ) {
    case "LOCK":
     if ( current_user_can( 'edit_post', $post->ID ) ) {
      $this->do_LOCK();
     } else {
      nocache_headers();
      status_header( 403 );
      die();
     }
     break;

    case "PUT":
     if ( current_user_can( 'edit_post', $post->ID ) ) {
      $this->do_PUT();
     } else {
      nocache_headers();
      status_header( 403 );
      die();
     }
     break;
   }
  }
 }

 /**
  * Do basic authentication
  */
 function basic_auth() {
  nocache_headers();
  if ( is_user_logged_in() ) {
   return;
  }

  $usr = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
  $pwd = isset($_SERVER['PHP_AUTH_PW'])   ? $_SERVER['PHP_AUTH_PW']   : '';
  if (empty($usr) && empty($pwd) && isset($_SERVER['HTTP_AUTHORIZATION']) && $_SERVER['HTTP_AUTHORIZATION']) {
   list($type, $auth) = explode(' ', $_SERVER['HTTP_AUTHORIZATION']);
   if (strtolower($type) === 'basic') {
    list($usr, $pwd) = explode(':', base64_decode($auth));
   }
  }
  $creds = array();
  $creds['user_login'] = $usr;
  $creds['user_password'] = $pwd;
  $creds['remember'] = false;
  $login = wp_signon($creds, false);
  if ( !is_wp_error( $login ) ) {
   $current_user = wp_set_current_user($login);
   return;
  }

  header('WWW-Authenticate: Basic realm="Please Enter Your Password"');
  status_header ( 401 );
  echo 'Authorization Required';
  die();
 }


 /**
  * Check for lock on document
  */
 function LOCK( &$options ) {
  $options["timeout"] = time()+300; // 5min. hardcoded
  $options["owner"] = "";
  $options["scope"] = "exclusive";
  $options["type"] = "write";
  return true;
 }

 function do_LOCK() {
  global $post;
  if ( $post ) {
   $current_user = wp_get_current_user();

   include_once "wp-admin/includes/post.php";
   $current_owner = wp_check_post_lock( $post->ID );
   if ( $current_owner && $current_owner != $current_user->ID ) {
    nocache_headers();
    status_header ( 423 );
    die();
   }
   nocache_headers();
   parent::http_LOCK();
   die();
  } else {
   nocache_headers();
   status_header ( 404 );
   die();
  }
 }

 function do_PUT() {
  global $post;

  if ( $post ) {
   $file = $this->_parsePutFile();
   $dir = $this->document_upload_dir();
   $wp_filetype = wp_check_filetype( basename( $file, null ) );

   $file_array = apply_filters( 'wp_handle_upload_prefilter', array(
     'name' => basename( $file ),
     'tmp_name' => $file,
     'type' => $wp_filetype['type'],
     'size' => 1,
    )
   );

   $attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file ) ),
    'post_content' => '',
    'post_status' => 'inherit',
   );

   $newfilepath = $dir . '/' . $file_array['name'];
   copy( $file, $newfilepath );
   unlink( $file );

   $attach_id = wp_insert_attachment( $attachment, $newfilepath, $post->ID );
   if ( !is_wp_error( $attach_id ) ) {
    $post_array = array(
     'ID' => $post->ID,
     'post_content' => $attach_id,
     'post_excerpt' => __('Revised by Desktop Edit', 'wp-document-revisions')
    );
    $result = wp_update_post( $post_array );
    wp_cache_flush();
    if ( !is_wp_error ( $result ) ) {
     nocache_headers();
     status_header( 204 );
     die();
    } else {
     nocache_headers();
     status_header( 500 );
     die();
    }
   }
  } else {
   nocache_headers();
   status_header ( 404 );
   die();
  }

 }

 private function _parsePutFile() {
  
Mutasd a teljes hozzászólást!
Ha a fenti php-ban kicseréled a

if (ob_get_level()) { ob_clean(); flush(); }
sorokat:
if (ob_get_level()) { ob_end_clean(); }
-ra, akkor nem fogja gzip-el tömöríteni.

szerk: lehet az ob_end_clean() jobb lesz az ob_end_flush() helyett - így az esetleges a fájl letöltése előtti tartalmat is törli és csak a fájl tartalma lesz benne.
Mutasd a teljes hozzászólást!

  • Mármint le sem engedi letölteni, vagy a letöltött file-ra írja hogy nem jó?



    Tudsz adni linket?
    Mutasd a teljes hozzászólást!
  • Szia!!

    Itt van a plugin:
    https://downloads.wordpress.org/plugin/wp-document-revisions.2.0.0.zip

    Ezt letöltöm, telepítem. (Ez a plugin letölthető dokksikat hoz létre WP-ben).
    Az a gond, vele, hogy az admin felületen szépen feltölt mindent, kategórizál, stb.
    de amikor a kliens oldalról elkezdek a fileokra kattintani, akkor hibásan töltődik le.
    Átnézve a mellékelt php-t arra jutottam, hogy amikor legenerálja a letöltendő filét, akkor ott a header létrehozásakor lesz probléma, csak nem találtam még meg a hibáját. (minden corrupt lesz). kimentettem egy fájlba a $filename, $file, adatokat, amik rendben vannak.

    Miért generálhat rossz headert??! (WP: 4.1; PHP ver: 5.4.28; ) IE, és FF alatt is teszteltem.

    Köszönöm,
    TheTester'
    Mutasd a teljes hozzászólást!
  • Szia!!

    Itt van a plugin:
    https://downloads.wordpress.org/plugin/wp-document-revisions.2.0.0.zip

    Ezt letöltöm, telepítem. (Ez a plugin letölthető dokksikat hoz létre WP-ben).
    Az a gond, vele, hogy az admin felületen szépen feltölt mindent, kategórizál, stb.
    de amikor a kliens oldalról elkezdek a fileokra kattintani, akkor hibásan töltődik le.
    Átnézve a mellékelt php-t arra jutottam, hogy amikor legenerálja a letöltendő filét, akkor ott a header létrehozásakor lesz probléma, csak nem találtam még meg a hibáját. (minden corrupt lesz). kimentettem egy fájlba a $filename, $file, adatokat, amik rendben vannak.

    Miért generálhat rossz headert??! (WP: 4.1; PHP ver: 5.4.28; ) IE, és FF alatt is teszteltem.

    Köszönöm,
    TheTester'
    Mutasd a teljes hozzászólást!
  • Csak észrevétel: A fájlok kezelése (feltöltés, átalakítás, mentés, letöltés stb) biztonsági kérdés...
    Szerintem nézd át a PLUGIN DOKSI-t, ha jól láttam ott kitérnek a biztonsági beállításokhoz (!!felhasználói jogosultság!!)...
    Megj: Ilyen hosszú kódot ("2015.02.15. 02:18"-kor) nem igen fog senki átnézni, ráadásul nem használtad a "forráskód" gombot sem...
    Mutasd a teljes hozzászólást!
  • Szia!!

    Ez a kérdéses rész:
    ...
     //Set content-disposition header. Two options here:
      // "attachment" -- force save-as dialog to pop up when file is downloaded (pre 1.3.1 default)
      // "inline" -- attempt to open in browser (e.g., PDFs), if not possible, prompt with save as (1.3.1+ default)
      $disposition = ( apply_filters( 'document_content_disposition_inline', true ) ) ? 'inline' : 'attachment';
      @header( 'Content-Disposition: ' . $disposition . '; filename="' . $filename . '"' );

      //filetype and length
      @header( 'Content-Type: ' . $mimetype ); // always send this
      @header( 'Content-Length: ' . filesize( $file ) );
      
      //modified
      $last_modified = gmdate( 'D, d M Y H:i:s', filemtime( $file ) );
      $etag = '"' . md5( $last_modified ) . '"';
      @header( "Last-Modified: $last_modified GMT" );
      @header( 'ETag: ' . $etag );
      @header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + 100000000 ) . ' GMT' );

      // Support for Conditional GET
      $client_etag = isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) ? stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) : false;

      if ( ! isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) )
       $_SERVER['HTTP_IF_MODIFIED_SINCE'] = false;
    ...

    Igen, használnám a forráskód gombot, de sajna, amióta ez az új felület van, nekem nem sikerült előcsalnom IE11 alatt..

    Átnéztem a dokksiját, de nem találtam egyenlőre megoldást, hogy miért nem rakja össze a letölthető filét.

    Köszönöm,
    TheTester'
    Mutasd a teljes hozzászólást!
  • Sajnos nekem nincs WP-m, ezért többet, konkrétabb segítséget nem tudod adni...
    Igen, használnám a forráskód gombot...

    Próbáld a "prog.hu/Bellítások"-ban átállítani a "klasszikus szerkesztő"-re...
    Mutasd a teljes hozzászólást!
  • Szia!!

    Igen, így tényleg jó,

    Működik ezzel a változattal.

    Már csak ezt a plugint kellene megoldani..


    TheTester'
    Mutasd a teljes hozzászólást!
  • A letöltött fájl mérete mekkora (letölt valamennyit vagy 0 byte lesz)?

    Ha nem 0 akkor nézd meg, hogy mi van benne - lehet, hogy az elején vagy végén vagy egy hibaüzenet ami miatt nem tudod megnyitni a fájlt.
    Mutasd a teljes hozzászólást!
  • Szia!!

    A letöltött file mérete (36.8 kb os eredeti) 5.8 kb, és a tartalmába belenézve teljesen összevisszaság.. Nincs header, se hasznos infó.

    TheTester'
    Mutasd a teljes hozzászólást!
  • Az eredeti 36.8 kb-os és a letöltött 5.8kb-os fájlokat be tudod csomagolni ez egy zip-be és feltölteni ide?
    Mutasd a teljes hozzászólást!
  • Szia!!

    Ez már nem ugyanaz, mert azt töröltem, de kerestem egy másik Word filét.

    Ha admin oldalon rányomok a megtekint-re, akkor a rendes méretét mutatja,
    de amint a mentésre nyomok (ha admin ha kliens oldalon) már csak ezt a kis méretű valamit menti el.

    Köszönöm,
    TheTester'
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • A probléma ott van, hogy a szerver gzip-ben tömörítve küldi le a szerverről a kliensre. Ha átnevezed a proba.doc-ot proba.gz-re, akkor ki tudod csomagolni és meg tudod nyitni a benne lévő fájlt.

    A kérdéses extensionben nem láttam gzip-re utaló sorokat, így vagy a szerver csinálja vagy egy másik extension (annyira nem ismerem a WP-t).
    Mutasd a teljes hozzászólást!
  • Igen, akkor a htacess be kellene vmi olyat írni, hogy ha file letöltés van, azt ne gzip-elje...

    Van ilyenre lehetőség??!
    Mutasd a teljes hozzászólást!
  • Ha a fenti php-ban kicseréled a

    if (ob_get_level()) { ob_clean(); flush(); }
    sorokat:
    if (ob_get_level()) { ob_end_clean(); }
    -ra, akkor nem fogja gzip-el tömöríteni.

    szerk: lehet az ob_end_clean() jobb lesz az ob_end_flush() helyett - így az esetleges a fájl letöltése előtti tartalmat is törli és csak a fájl tartalma lesz benne.
    Mutasd a teljes hozzászólást!
  • Szia!!

    Épp ezeket nézegettem én is:
    .htaccess - gzip and cache your site for faster loading and bandwidth saving


    Hogy lehet, hogy ezt alapból nem így írták meg, mi lehetett az oka??!

    NAGYON SZÉPEN KÖSZÖNÖM!! a megoldás!!


    Szuperül működik!!

    TheTester'

    Mutasd a teljes hozzászólást!
abcd