2016-01-29 6 views
1

Я пишу плагин перевода jQuery. Моя первая итерация передала массив строк для перевода. Хотя это сработало хорошо, это было ужасно медленно. Я модифицировал плагин, чтобы передать одно слово за раз. Обе процедуры используют ajax для вызова функции PHP Translate, показанной ниже. Я проверил, чтобы убедиться, что вызовы ajax работают и правильно передают слова. Я также проверял ответы, связанные с предупреждениями, безрезультатно.Почему я получаю эти PHP Предупреждение: simplexml_load_string

После того, как первое слово переведено, я получаю следующие сообщения, которые повторяются для каждого слова. Я также получаю пару ошибок curl, жалующихся, что не смог подключиться к хосту (Translate-Exception: curl = не удалось подключиться к хосту) после многочисленных предупреждений.

Предупреждения

Startseite (первое слово переводится правильно)

Предупреждение: simplexml_load_string() [function.simplexml нагрузки строка]: Entity: строка 1: анализатор ошибок: Space требуется после публичного идентификатора в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php в строке 170

Предупреждение: simplexml_load_string() [function.simplexml-load-string]: http: // www.w3.org/TR/html4/str in D: \ hshome \ c287577 \ tes t.bunkerhill.com \ php \ translate.php в строке 170

Предупреждение: simplexml_load_string() [function.simplexml-load-string]:^в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php on line 170

Предупреждение: simplexml_load_string() [function.simplexml-load-string]: Entity: строка 3: ошибка парсера: несоответствие открытия и окончания тегов: строка 3 META и HEAD в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php в строке 170

Предупреждение: simplexml_load_string() [function.simplexml-load-string]: в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php в строке 170

PHP

public function Translate() { 
    try { 
     if (!empty($_POST['text'])) 
      $text = $_POST['text']; 
      else 
      throw new RuntimeException('Programmer Error: text to translate not found or is empty!'); 
     $auth = new AccessTokenAuthentication(); 
     $authHeader=$auth->authenticate(); 
     $fromLanguage = empty($_POST['fromLang']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : $_POST['fromLang']; 
     $toLanguage = empty($_POST['toLang']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : $_POST['toLang']; 
     $contentType = 'text/plain'; 
     $category  = 'general'; 
     //Create the Translator Object. 
     $translatorObj = new HTTPTranslator(); 
     //$translated = array(); 
     //foreach ($elements as $element) { 
      $params = "text=".$text."&to=".$toLanguage."&from=".$fromLanguage; 
      $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params"; 
      //Get the curlResponse. 
      $curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader); 
      //Interprets a string of XML into an object. 
      $xmlObj = simplexml_load_string($curlResponse); 
      echo $xmlObj[0]; 
      /* unset($translatorObj); 

      foreach((array)$xmlObj[0] as $val){ 
       array_push($translated, $val); 
      } 
      } end-foreach 
       echo json_encode($translated); 
      */ 
    } 
    catch (Exception $e) { 
      echo "Translate-Exception: " . $e->getMessage() . PHP_EOL; 
    } 
} 

CURL КОД

function curlRequest($url, $authHeader, $postData='') 
{ 
    //Initialize the Curl Session. 
    $ch = curl_init(); 
    //Set the Curl url. 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    //Set the HTTP HEADER Fields. 
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array($authHeader,"Content-Type: text/xml")); 
    //CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec(). 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    //CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate. 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, False); 
    if($postData) { 
     //Set HTTP POST Request. 
     curl_setopt($ch, CURLOPT_POST, TRUE); 
     //Set data to POST in HTTP "POST" Operation. 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
    } 
    //Execute the cURL session. 
    $curlResponse = curl_exec($ch); 
    //Get the Error Code returned by Curl. 
    $curlErrno = curl_errno($ch); 
    if ($curlErrno) { 
     $curlError = curl_error($ch); 
     throw new Exception('curl='.$curlError); 
    } 
    //Close a cURL session. 
    curl_close($ch); 
    if (trim($curlResponse)=='') echo 'c-ressp='.$curlResponse; 
    return $curlResponse; 
} 

Кажется, что есть какое-то хронометраж вопроса, но я не могу идентифицировать. Надеюсь, кто-то там испытал подобную проблему и может пролить свет на эту болезненную ситуацию.

+0

Thanks Jay. Как ты это сделал? –

+0

Jay - волшебник;) На самом деле в редакторе есть кнопка blockquote. –

+0

use @simplexml_load_string ($ curlResponse) вместо: p – webzar

ответ

0

Чтобы решить эту проблему, я решил переписать перевод с использованием JavaScript вместо PHP. Это теперь бесконечно быстрее, чем версия PHP.

Смежные вопросы