2014-02-06 1 views
0

그래서 내가 여러 사이트에 업로드를 처리하는이 PHP 스크립트를 형태로 여러 스크립트를 업로드 할 수 있습니다. 약 3 사이트는 위 아래한 번 요구하거나

다음

업로드를 처리하는 스크립트 중 하나입니다 ...

class APIUpload 
{ 
    private $data; 

    public function __construct(Array $data) 
    { 
     $this -> data = $data; 
    } 

    public function doUpload() 
    { 
     $ch = curl_init(); 

     if (is_resource($ch)) 
     { 
      curl_setopt($ch, CURLOPT_URL, 'http://example.com/upload_api/'); 

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

      curl_setopt($ch, CURLOPT_POSTFIELDS, $this -> data); 

      curl_setopt($ch, CURLOPT_TIMEOUT, 5); 

      $data = curl_exec($ch); 

      curl_close($ch); 
     } 

     if (empty($data)) 
     { 
      $this -> error = 'An unexpected error occured.'; 

      return; 
     } 

     return $this -> parse($data); 
    } 

    private function parse($data) 
    { 
     if (! ($json = json_decode($data, true)) Or (json_last_error())) 
     {            
      $this -> error = 'There was a issue decoding the response.'; 

      return; 
     } 

     if (isset($json -> error)) 
     { 
      $this -> error = $json -> error; 

      return; 
     } 

     return $json; 
    } 

    public function getError() 
    { 
     return $this -> error; 
    } 
} 

$message = null; 
if ($_SERVER[ 'REQUEST_METHOD' ] == 'POST') 
{ 
    /* Initialize Upload */ 
    $Api = new APIUpload([ 
     'name'  => $_POST[ 'name' ], 
     'category' => $_POST[ 'category' ], 
     'hash' => $_POST[ 'apikey' ], 
     'file' => '@' . $_POST[ 'file' ], 
     'description' => $_POST[ 'descr' ] 
    ]); 

    if (! ($data = $Api -> doUpload())) 
    { 
      $message = $Api -> getError(); 
    } 
    else 
    { 
      $message = sprintf('Your file has been uploaded to: %s', $data[ 'ok' ]); 
     } 
     } 

?> 

.. 지금은 업로드하지만 서로 다른 API 배열과 같은 클래스를 사용하여, 모두가 있습니다 PHP 스크립트, 나는

<div style="color: #ff0000;"><?php echo $message; ?></div> 

<form method="post" action=""> 

<fieldset> 

<legend>API Example</legend> 

<label for="name">Name</label> 
<input type="text" name="name" id="name"> 

<label for="file">File</label> 
<select name="file" id="file"> 
<option value="">Select File</option> 
<?php foreach (glob('files/*.torrent') As $file): ?> 
    <option value="<?php echo $file; ?>"><?php echo basename($file); ?></option> 
<?php endforeach; ?> 

<label for="category">Category</label> 
<select name="category" id="category"> 
    <option value="0">Select A Category</option> 
    <option value="50">Adult XXX</option> 
    <option value="28">Anime</option> 
    <option value="18">Apps</option> 
    <option value="51">Books</option> 
    <option value="10">Games</option> 
    <option value="52">Mobile</option> 
    <option value="1">Movies</option> 
    <option value="22">Music</option> 
    <option value="33">Other</option> 
    <option value="70">Pictures</option> 
    <option value="113">TV</option> 
    <option value="71">Videos</option> 
</select> 

<label for="apikey">Apikey</label> 
<input type="text" name="apikey" id="apikey" value= ""> 

<label for="description">Description</label> 
<input type="text" name="descr" id="description" value="Default description..."> 

<input type="submit" value="Upload"> 

</fieldset> 

</form> 
.... 게시물이 값이 PHP 필드에 입력 한이 HTML 스크립트가

내 문제는 다른 사이트로 업로드 할 PHP 스크립트 약 3 개가 있지만 다른 스크립트를 한 번에 실행할 수 있도록이 스크립트를 어떻게 실행할 수 있습니까?

예. 다음

site1.php site2.php site3.php

홈페이지 스크립트는 html로 한 번에 실행할 수있는 형태로 ...

감사합니다 .... 당신은 사용할 필요가

답변

0

있다한 번에 여러 요청을 실행하는 멀티 컬은 이와 같은 것을 사용합니다.

$urls = array($site1, $site2, $site3); 
$url_count = count($urls); 

$curl_arr = array(); 
$master = curl_multi_init(); 

for($i = 0; $i < $url_count; $i++) 
{ 
    $url =$urls[$i]; 
    $curl_arr[$i] = curl_init($url); 
    curl_setopt($curl_arr[$i], CURLOPT_URL, 'http://example.com/upload_api/'); 
    curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_arr[$i], CURLOPT_POSTFIELDS, $this -> data); 
    curl_setopt($curl_arr[$i], CURLOPT_TIMEOUT, 5); 
    curl_multi_add_handle($master, $curl_arr[$i]); 
} 

do { 
    curl_multi_exec($master,$running); 
} while($running > 0); 
+0

이 추가 고맙지 만 각 사이트의 배열 값 – iOflower

+0

사이트 1 사용 말하게 ... 다른 '$ API 광고 = 새로운 APIUpload ([ '이름 '=> $ _POST ['이름 '] , 'category'=> $ _POST [ 'category'], 'hash'=> $ _POST [ 'apikey'], 'file'=> '@'. $ _POST [ 'file'], '설명 새로운 APIUpload ( 'name'=> $ _POST [ 'name'], 'categoryname'=> $ _POST [ '>> $ _POST ['descr '] ] '장르', 'hashkey'=> $ _POST [ 'apiKey에'] '파일 이름'=> '@' . $ _POST [ '파일'] 'DESC'=> $ _POST [ 'DESCR'] ])이 예에서 ' – iOflower

+0

나는 동일한 값을 사용하지만, 각 사이트 초기화 업로드 루프 내에서 서로 다른 값을 추가 할 $ API 광고 = 새로운 APIUpload는 ($ site1_data_array, $ site2_data_array)이 배열과 같은 모든 사이트의 배열 값 배열을 보내; – user3104130