0

私は PHP の初心者です。WordPress 用のプラグインを書いています。コードを顧客に販売できるようにするプラグインです。この顧客はサイトにアクセスし、そのコードをテキスト ボックスに入力して送信します。php スクリプトは、そのコードが存在する場合は mysql をチェックし、ダウンロードを開始します。これは、ダウンロード (zip 内の写真) を販売しているため、サーバーで指定されたファイル名を拡張子なしで取得し、それが存在するファイル名として出力するためです。ダウンロード用の名前を付けて保存ボックス、コードの機能を終了するのと同じように、最初にローカルでテストした後、ライブサイトでテストします...これはローカルホスト(xampp)の問題であり、ダウンロードを開始して正常に動作しますライブサイトではこれを行います:

http://www.ctwo12.com/output.png

これは私のコードです:

$fileonS = $_SERVER['DOCUMENT_ROOT'] . "/wp-content/plugins/photo_dwn_man/downloads/" .    $codeRResult;

//download file (NEEDS MORE LOOKING INTO THIS IS JUST THE BASICS)
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $codeOResult . '.zip');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileonS));
ob_clean();
flush();
readfile($fileonS);
exit;

皆さんが助けてくれるか、私を正しい方向に向けてくれることを願っています。コピーしないことを学ぶためにここにいるので、説明してください!

よろしく、アダム

4

3 に答える 3

0

これが私が修正した方法です...ヘッダー部分を別のPHPファイルに追加する必要があり、正しいコードが入力されて送信されたら、JavaScriptを呼び出してPHPをロードし、いくつかのGET変数を渡しました...

私の別のファイルには次が含まれます:

<?php
    $getcodeOResult = $_GET['gcor'];
    $getcodeRResult = $_GET['gcsr'];
    $fileonS = $_SERVER['DOCUMENT_ROOT'] . "/wp-content/plugins/photo_dwn_man/downloads/" . $getcodeRResult;
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $getcodeOResult . '.zip');
    header('Content-Transfer-Encoding: binary');
    header('Pragma: public');
    header('Content-Length: ' . filesize($fileonS));
    ob_clean();
    flush();
    readfile($fileonS);
?>

ダウンロードを開始する関数は次のようになります。

function startDownload() {
    // This function handles the download start
    // Get filename you want user to download by getting the contents of dB row that matches the user input
    $theCodeOfile = $GLOBALS['wpdb']->get_col( "SELECT dwn_file FROM wp_photodwnman WHERE dwn_code='" . $GLOBALS['userCode'] . "'");

    // Get the actual servers filename by getting the contents of dB row that matches the user input
    $theCodeRfile = $GLOBALS['wpdb']->get_col( "SELECT dwn_pseu FROM wp_photodwnman WHERE dwn_code='" . $GLOBALS['userCode'] . "'");

    // join both results into a string and not an array
    $codeOResult = join("", $theCodeOfile);
    $codeRResult = join("", $theCodeRfile);
    $GLOBALS['wpdb']->query( "UPDATE wp_photodwnman SET dwn_count=dwn_count+1 WHERE dwn_code='" . $GLOBALS['userCode'] . "'");
    // adds to variable the location and filename
    echo "<script>window.onload = function(){window.location.href='http://ctwo12photography.co.uk/wp-content/plugins/photo_dwn_man/dwnload.php?gcor=" . $codeOResult . "&gcsr=" . $codeRResult . "'};   </script>";
}

そのため、なぜこのように動作するのかを理解することはできませんでしたが、これで解決策が得られました!

于 2013-05-29T09:58:54.373 に答える
0

これは、さまざまな原因で発生する可能性があります。最も一般的な原因は次の 2 つです。

  1. サーバーでPHPが有効になっていません

  2. あなたのコードはphpの短いタグを使用しており、サーバーはそれらをオフにしています<?vs<?php

于 2013-05-25T07:25:30.143 に答える
0

サーバーの内部設定を確認し、PHP が有効になっているかどうかを確認します。有効になっている場合は、サーバーと php を再構成してみてください。それでも問題が解決しない場合は、友人のサーバーでこれをチェックして、問題がサーバーにあるかどうかを確認してください。

于 2013-05-26T13:56:29.100 に答える