1

我使用 wordpress 作为 cms。我需要在每个帖子上提供一个 zip 文件下载 [给注册用户],其中包含附加到帖子的所有图像。给出的代码仅来自主文件“gallery-zip.php”(原始代码和此处的其余文件)。问题是它仅适用于本地主机,而不适用于实时服务器。

插件代码

<?php

namespace GalleryZip;

add_action( 'plugins_loaded', __NAMESPACE__ . '\gallery_zip_start', 10, 0 );

/**
* Invoke the plugin and load the needed classes
*/
function gallery_zip_start() {
// simple autoloader
$classes = glob( dirname( __FILE__ ) . '/classes/*.php' );

if ( ! empty( $classes ) ) {
foreach ( $classes as $class )
require_once $class;


add_action( 'init', __NAMESPACE__ . '\add_hooks', 10, 0 );
add_action( 'init', __NAMESPACE__ . '\enqueue_scripts', 10, 0 );

if ( is_admin() )
return;

// this is only needed on the frontend
GalleryZip::get_instance( new GalleryZip_DataContainer() );

}
}

/**
* Adding the needed hooks
*/
function add_hooks() {
add_action( 'wp_ajax_get_galleryzip', __NAMESPACE__ . '\get_gallery_zip', 10, 0 );
add_action( 'wp_ajax_nopriv_get_galleryzip', __NAMESPACE__ . '\get_gallery_zip', 10, 0 );
}

/**
* Enqueu the JavaScript
*/
function enqueue_scripts() {
// load minified version if SCRIPT_DEBUG is true
$min = ( defined( 'SCRIPT_DEBUG' ) && true == SCRIPT_DEBUG ) ? '' : '.min';
wp_enqueue_script(
'gallery-zip',
plugins_url(
sprintf( 'js/gallery_zip%s.js', $min ),
__FILE__
),
array( 'jquery' ),
false,
true
);

// set JS object with params
wp_localize_script( 'gallery-zip', 'GalleryZip', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}

/**
* Ajax callback for creating the zip-file and sending the url to zip-file
*/
function get_gallery_zip() {
$send_result = function( $result = '' ) {
if ( is_array( $result ) )
$result = var_export( $result, true );

header( 'Content-type: application/json' );
die( json_encode( array( 'result' => $result ) ) );
};

$post_id = (int) filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT );
$gallery_id = (int) filter_input( INPUT_POST, 'gallery_id', FILTER_SANITIZE_NUMBER_INT );

if ( 0 >= $post_id )
$send_result( var_export( $_POST, true ) );

$images = GalleryZip::get_images_ajax_callback( $post_id, $gallery_id );
$send_result( $images );
}

测试环境

  1. LOCALHOST:在 PHP 5.3.10 和最新的 wordpress 3.6.1 上运行。
  2. LIVE SITE:在 PHP 5.3.27 上运行,并再次使用最新的 wordpress 3.6.1。

我尝试过和做过的事情。我使用最新的 wordpress 3.6.1 和 PHP 版本 5.3.10 在我的本地主机上测试了插件,并在 single.php 模板中使用了这行代码<?php echo do_shortcode('[gallery]'); ?>。它在点击时提供了一个不错的 zip 下载链接“Get as Zip”,一切都完美无缺。

一旦我在我的实时站点上安装了插件,它就会抛出一个错误,因为该站点使用的是旧版本的 PHP 5.2,特别是由于插件代码第一行中的命名空间语法 - namespace GalleryZip;,因此首先我升级了PHP 版本。

现在,我让它在实时站点上运行,它会按预期显示一个链接“GalleryZip”,但该链接不会提示 zip 下载,单击时会刷新页面。

为了排除我在最新的 firefox、chrome 和 safari 浏览器中测试过的基本内容,它们在 localhost 而不是在实时站点上按预期工作。Wordpress 相关:我将主题更改为默认的二十三(在循环内外尝试过)并且还禁用了所有其他插件,结果没有变化。

Firebug 控制台会http://website.com/wp-admin/admin-ajax.php 200 OK在单击链接时显示,即使在实时站点上也是如此。几周前,我还向原始开发人员寻求帮助,但尚未收到任何回复。所以,如果可以的话,请看一下代码,如果我在任何地方出错,请告诉我是否可以解决或纠正我。另外请让我知道我是否应该在其他地方问它。尽管我一直在不断地进行测试,并且尽我所能,但总是感谢您提供一点帮助。

4

1 回答 1

2

请将 775 输入到您要上传图像的目录。777非常危险。

于 2013-09-30T17:18:51.897 回答