2016-11-03 5 views
0

これは、ファイルを処理するphp-codeに送信するajaxベースのファイルアップロードです。これはすべて正常に動作し、json_encoded配列を返します。しかし、この配列は「成功」または「エラー」のいずれかの結果を返しますが、HTTPステータスコードを実際に変更できるようにしたいと考えています(現在はすべて200 OKを返します)。スクリプト)。カスタムHTTPレスポンスコードとJSONの返信

誰かがPHPにhttp_response_code()とjson_encoded()メッセージを送信するためのコードを持っていますか?あるいは、私はどこかの例にリンクすることができますか?

私はprocess_upload.phpファイルのコードを含めました。長さは残念です(約130行です)。最後にはhttp_status_code(415)を含めるようにしましたが、これは何もしません。

http_status_code()をトリガーする変数がどこにあるのか誤って判断したので、コードを更新しました。それを修正する、それは動作します。

<?php 
if (!session_id()) { session_start(); }; 
require_once('conf/config.php'); 
require_once('functions.php'); 
$returnmessage = json_encode(["content"=>"Error Error Error","infotype"=>"error"]); 
$changereturnheader = 0; 
if ((isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) || $allow_public == true) { 
     if (isset($_FILES['file'])) { 
      if (in_array('error', $_FILES['file'])) { 
       switch ($_FILES['file']['error']) { 
        case 0: 
        $returnerror = false; 
        $returnerrorcontent = ''; 
        break; 
        case 1: 
        $returnerror = true; 
        $returnerrorcontent = 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; 
        break; 
        case 2: 
        $returnerror = true;   
        $returnerrorcontent = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; 
        break; 
        case 3: 
        $returnerror = true;   
        $returnerrorcontent = 'The uploaded file was only partially uploaded'; 
        break; 
        case 4: 
        $returnerror = true;   
        $returnerrorcontent = 'No file was selected'; 
        break; 
        case 6: 
        $returnerror = true;   
        $returnerrorcontent = 'Missing a temporary folder. Introduced in PHP 4.3.10 and PHP 5.0.3'; 
        break; 
        case 7: 
        $returnerror = true;  
        $returnerrorcontent = 'Failed to write file to disk. Introduced in PHP 5.1.0'; 
        break; 
        case 8: 
        $returnerror = true;   
        $returnerrorcontent = 'A PHP extension stopped the file upload. Introduced in PHP 5.2.0'; 
        break; 
        default: 
        $returnerror = false; 
        $returnerrorcontent = ''; 
        break; 
       } 
      } 
      if (isset($_FILES['file']) && $returnerror == false) { 
       $allowed = ''; 
       $allowed_extensions = allowedExtensions(''); 
       $totalentries = count(allowedExtensions('')) -1; 
       for ($i = 0; $i <= $totalentries; $i++) { 
        $allowed .= (($i == $totalentries) ? $allowed_extensions[$i] : $allowed_extensions[$i].', '); 
       } 
       if (($_FILES['file']['size'] + foldersize($userpath.$username) < $storage_limit)) { 
        if (in_array($_FILES['file']['type'], allowedMimeTypes(''))) { 
         if (in_array($_FILES['file']['type'], allowedMimeTypes('audio'))) { 
          $folder = 'music'; 
         } elseif (in_array($_FILES['file']['type'], allowedMimeTypes('image'))) { 
          $folder = 'pictures'; 
         } elseif (in_array($_FILES['file']['type'], allowedMimeTypes('video'))) { 
          $folder = 'video'; 
         } elseif (in_array($_FILES['file']['type'], allowedMimeTypes('application'))) { 
          $folder = 'documents'; 
         } elseif (in_array($_FILES['file']['type'], allowedMimeTypes('text'))) { 
          $folder = 'documents'; 
         } 
         $filename = $_FILES['file']['name']; 
         if (file_exists(''.$userpath.$username.$folder.'/'.onlyValidChar($_FILES['file']['name']))) { 
          if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
           // echo 'exist'; 
           $returnmessage = json_encode(["content"=>"$filename already exist","infotype"=>"error"]); 
          }      
         } else { 
          move_uploaded_file($_FILES['file']['tmp_name'],''.$userpath.$username.$folder.'/'.onlyValidChar($_FILES['file']['name'])); 
          if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
           // echo 'uploaded file'; 
           $returnmessage = json_encode(["content"=>"You uploaded $filename","infotype"=>"success"]); 
          } 
          $movedfile = pathinfo($_FILES['file']['name']); 
          if (in_array(strtolower($movedfile['extension']),allowedExtensions('')) && in_array($_FILES['file']['type'],allowedMimeTypes('image'))) { 
           // createThumbs($userpath.$username.$folder.'/',onlyValidChar($_FILES['file']['name']),200); 
           generate_image_thumbnail($userpath.$username.$folder.'/'.onlyValidChar($_FILES['file']['name']),$userpath.$username.$folder.'/thumbs/'.onlyValidChar($_FILES['file']['name'])); 
          } 
          if (in_array(strtolower($movedfile['extension']),allowedExtensions('')) && in_array($_FILES['file']['type'],allowedMimeTypes('video'))) { 
           $video = $_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.$folder.'/'.onlyValidChar($_FILES['file']['name']); 
           $thumbnail = $_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.$folder.'/thumbs/'.onlyValidChar($_FILES['file']['name']).'.jpg'; 
           $get_frames = shell_exec("/usr/local/bin/ffmpeg -nostats -i $video -vcodec copy -f rawvideo -y /dev/null 2>&1 | grep frame | awk '{split($0,a,\"fps\")}END{print a[1]}' | sed 's/.*= *//'"); 
           $stills_number = floor($get_frames/200); 
           $output = shell_exec("/usr/local/bin/ffmpeg -y -i $video -frames 1 -q:v 1 -vf 'select=not(mod(n\,$stills_number)),scale=-1:120,tile=100x1' $thumbnail"); 
          } 
          updateCurrentUploads('current_uploads.php',$_FILES['file']['name']); 
         } 
        } else { 
         if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {         
          $changereturnheader = 1; 
          $returnmessage = json_encode(["content"=>"The filetype you tried to upload is not allowed","infotype"=>"error"]); 
         } 
        } 
       } else { 
        echo 'exceeding diskspace'; 
        $returnmessage = json_encode(["content"=>"The file will exceed your available diskspace. Delete some of the files already uploaded to make room","infotype"=>"error"]); 
       } 
      } elseif ($returnerror == true) { 
       if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
        // echo 'error-message return'; 
        $returnmessage = json_encode(["content"=>"$returnerrorcontent","infotype"=>"error"]); 
       } 
      } else { 
       if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
        // echo 'filetype not allowed 2'; 
        $changereturnheader = 1; 
        $returnmessage = json_encode(["content"=>"The filetype you tried to upload is not allowed","infotype"=>"error"]); 
       } 
      } 
     } 
    // echo returnCurrentUploads('current_uploads.php'); 
     if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
      // echo 'returnmsg'; 
      if ($changereturnheader == 1) { 
       http_response_code(415); 
      } 
      echo $returnmessage; 
     } else { 
      header('location: upload'); 
     } 
    } 
?> 

答えて

0

を助け場合、私は愚かだし、それはバグだった見ヘッダ機能を使用しようとしてくださいすることができ私の視力ではなく、機能性です。私は、AJAXを介して行われたリクエストと、AJAX以外の通常のファイル転送によるリクエストの2つの返信メッセージを設定しました。私は、AJAX以外のアップロードでhttp_status_code()を有効にする変数のみを適用しました。追加した後、正常に動作します。質問のコードも変更したので、今すぐ動作します。

1

私はhttp_response_code(415)を送信し、またJSONを提供することができています:

<?php 

$array = array(
    'one' => array(1, 2, 3), 
    'two' => array(4, 5, 6), 
    'three' => array(7, 8, 9), 
); 

http_response_code(415); 
echo json_encode($array); 

enter image description here

+0

hm。それは私と同じことです。私はもう少しお試しになります。 – junkfoodjunkie

+0

"だから誰もPHPがhttp_response_code()とjson_encoded()メッセージを送信できるようにするコードを持っていますか? - 私は解決してもらえますか? – WEBjuju

+0

私はそれを修正しました。私自身の答えと編集されたコードを参照してください。 – junkfoodjunkie

0

私はあなたのPHPのバージョンは、その機能をサポートしていない可能性があります信じています。

あなたは

header("HTTP/1.0 415 Unsupported Media Type"); 

代わりの

http_response_code(415); 

、それは

+0

私はPHP 7.1を使用しています。私自身の答えを見てください。 – junkfoodjunkie