1

私はpluploadと呼ばれる非同期ファイルアップロードツールを使用しています。スタンドアロンページですべてをセットアップして希望どおりに動作させましたが、問題があります。私は自分のコードをコンテンツ管理システムに転送しています。コンテンツ管理システムは、ページごとのすべてのPHPをデータベースに保存します。また、PHPスニペットを解析して、すべてにエラーがないことを確認します。

問題はこれです。アップロードが成功したときに応答を返したいのですが。

スタンドアロンページでは、die('A response')を使用して、HTMLセクションの前でPHPを停止します。この場合、CMSがページの残りの部分を完全に提供するため、できません。

劣化したフォームの検証などのためにJavaScript以外のものを組み込んでいるため、フォームを自分自身に送信する必要があります。

誰かが簡単な解決策を持っていますか?私は現在、非同期応答をテストしており(投稿後、つまり)、アップロードが完了したら「成功」と呼んでいます。私はそれが本当に好きではありません。失敗した場合にサーバーエラーを強制することについて疑問に思いました(可能な場合)。それは特に悪い習慣でしょうか?

4

3 に答える 3

2

CMSのindex.phpファイルを上書きする場合は、これで問題ありません。

  • 現在のindex.phpの名前を別の名前に変更します。'cms.php'と言います。サーバーだけがそこから読み取ることができるように、アクセス許可を変更することをお勧めします。
  • 'index.php'という名前の新しいPHPファイルを作成します。PHPマニュアルのインクルードドキュメント(#6)の例を使用しています。これが(変更された)コードです。
    • 注:インデントはすべて厄介なので、代わりにペーストビンします。お気軽に編集してください

サイトのいずれかの部分で失敗させたい場合は、実際のデータをに貼り付けるだけで$GLOBALS['failContent']、CMSで生成された出力がユーザーに表示されることはありません。


これを行うとどのような効果dieがあるかはわかりませんが、何も出力できなくなると思います...でもわかりません。誰か知っている?

于 2012-01-08T18:44:37.020 に答える
2

このコードをphpファイルに入れます

<?php
$uploaddir='../uploads/';
$uploadfile=mysql_prep($uploaddir.basename($_FILES['uploadfile']['name']));
if(move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile))
 {
  $name=mysql_prep(($_FILES['uploadfile']['name']));
  $type=mysql_prep(($_FILES['uploadfile']['type']));
  $data=($uploadfile);
  $size= intval($_FILES['uploadfile']['size']);
  #echo $data;
  $branch=mysql_prep($_POST['branch']);
  $sem=mysql_prep($_POST['sem']);
  $query="INSERT INTO upload_file (name,type,data,size,created,branch_id,sem_id) VALUES ('{$name}','{$type}','{$data}','{$size}',NOW(),'{$branch}','{$sem}')";
  $result=mysql_query($query);
  if($result){
      echo"<h2>file successfully uploaded<h2>";
      redirect_to(root."afterlogin/upload.php?spload=0112");
  }
  else{
      echo" the file you insert can't be uploaded";
  }

これをhtmlファイルに含めます

 <?php if(isset($_GET['spload'])){
 $upload_process="you have successfully uploaded your file. ";
 $upr=1;   

  }else{

    $upr=0;

 }

?>
于 2012-01-08T18:47:02.413 に答える
0

上記のMySQLの提案に触発された手法を使用しています。

pluploadには、FileUploadedイベントが含まれます。

アップロードを起動して各ファイルと一緒に投稿する前に、乱数を生成しています。サーバー側でファイルの移動が完了したら(実際には電子メールの添付ファイル)、メールの送信が成功した場合は、名前にランダムな番号を使用し、コンテンツに「成功」​​などを使用して小さなテキストファイルを作成します。 。次に、pluploadのFileUploadedが起動されると、同じ乱数を渡して、小さなスタンドアロンPHPファイルに新しい非同期要求を行い、リンクを解除する前にファイルを読み取ります。

助けてくれてありがとう。非常にうまく機能しているようです。

于 2012-01-08T21:04:21.697 に答える