2017-02-08 11 views
1

私はこのPHPスクリプトを少し前に作成しましたが、うまくいきます。"echo"も "print"も "printf"も使用されていないにもかかわらず、phpスクリプトは値を返しますか?

UPDATE

のみのもの(この問題には関係ありませんが判明したテキストの多くを削除しました。):それは働いている理由を私は知りません。ため、ここでの要求に

UPDATE

を($結果、私は方法がわからない返します)問題の元(賢明な情報を交換)スクリプト:

<?php 

    $http_origin = $_SERVER['HTTP_ORIGIN']; 

    if ($http_origin == "https://some.domains.tld" || 
     $http_origin == "https://some.domains.tld" || 
     $http_origin == "https://some.domains.tld" || 
     $http_origin == "https://some.domains.tld" || 
     $http_origin == "https://some.domains.tld") 
    { 
     header("Access-Control-Allow-Origin: ".$http_origin); 
    } 

    ### global variables 
    $curl; $mode = $_POST['mode']; 

    ### init logging 
    $file = fopen('error.txt', 'w'); 

    ### log request source 
    #fwrite($file, "request from: ".$http_origin."\n"); 

    ### create variable parameters 
    $api_key='mysecretkey'; 

    ###Init curl 
    #fwrite($file, "Ok, try to include curl..."."\n"); 

    try{ 
     $curl = curl_init(); 
    }catch(Exception $e){ 
     fwrite($file, "curl init failed. Look: "."\n".$e."\n"); 
     return null; 
    } 

    switch ($mode) { 
     case 'alldatas': 
      alldatas(); 
      break; 

     case 'adata': 
      adata(); 
      break; 

     case 'register': 
      register(); 
      break; 

     default: 
      return; 
    } 

    ###Get list of all datas 
    function alldatas() 
    { 
     global $curl; 
     global $api_key; 
     global $file; 
     $result; 

     $params = ['api_key' => $api_key]; 

     try{ 
      curl_setopt($curl, CURLOPT_URL, "https://some.third-party.service/api/v2/ever/webinars"); 
      curl_setopt($curl, CURLOPT_POST, true); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 

      $result = curl_exec($curl); 

     }catch(Exception $e){ 
      fwrite($file, "data list failed. Look: "."\n".$e."\n"); 
      return null; 
     } 

     return $result; 
    } 

    ###Get a data 
    function adata() 
    { 
     global $curl; 
     global $api_key; 
     global $file; 
     $result; 

     $data_id = $_POST['data_id']; 

     if($data_id){ 

      $params = [ 
       'api_key' => $api_key, 
       'data_id' => $data_id 
      ]; 

      try{ 
       curl_setopt($curl, CURLOPT_URL, "https://some.third-party.service/api/v2/ever/webinar"); 
       curl_setopt($curl, CURLOPT_POST, true); 
       curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 

       $result = curl_exec($curl); 

      }catch(Exception $e){ 
       fwrite($file, "webinar fetch failed, man. Look: "."\n".$e."\n"); 
       return null; 
      } 

      return $result; 

     } 

    } 

    ###Register user to a datas 
    function register(){ 

     global $curl; 
     global $api_key; 
     global $file; 
     $result; 

     $data_id = $_POST['data_id']; 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $schedule = $_POST['schedule']; 
     $timezone = $_POST['timezone']; 

     if($data_id && $name && $email && $schedule && $timezone){ 

      $params = [ 
       'api_key'=>$api_key, 
       'data_id'=>$data_id, 
       'name'=>$name, 
       'email'=>$email, 
       'schedule'=>$schedule, 
       'timezone'=>$timezone 
      ]; 

      try{ 
       curl_setopt($curl, CURLOPT_URL, "https://some.third-party.service/api/v2/ever/register"); 
       curl_setopt($curl, CURLOPT_POST, true); 
       curl_setopt($curl, CURLOPT_POSTFIELDS, $params); 

       $result = curl_exec($curl); 

      }catch(Exception $e){ 
       fwrite($file, "data list failed. Look: "."\n".$e."\n"); 
       return null; 
      } 

     } 
     return $result; 
    } 

?> 
+3

SImplified版は明らかにいくつかの賢明なコードを失った。 –

+0

@u_mulderしかし、どのようなコードですか?完全版でさえ、ファイル全体に "エコー"、 "プリント"、または "プリント"はありません。だから質問は基本的には:データを返す他の方法が存在する/残っている? – MarMun

+0

_データを返す他の方法はありますか?_ PHPタグに含まれていないもの... – AbraCadaver

答えて

4

あなたはCURLOPT_RETURNTRANSFER設定されていませんあなたのcurl_setopt()のつまり、curl_exec()が呼び出されると、cURL転送の結果はとなり、が出力されます。それがあなたの返されたデータの出所です。

CURLOPT_RETURNTRANSFERTRUEの場合、curl_exec()はデータを返し、何もエコーしません。しかし、CURLOPT_RETURNTRANSFERFALSE(または設定解除)の場合、curl_exec()はデータをエコーし​​、TRUEを返します。

+1

Aha!今私はそれを得る。私のスクリプトは偶然によってうまくいった。明確化のために非常にありがとう!あなたの助けを – MarMun

1

curl_execエコーあなたは、出力データに

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
+1

thx!あなたの助けを – MarMun

関連する問題