Задать вопрос
@ilya17392

Как записать данные во все файлы?

class yandex {
	private $APIkey = "trnsl.1.1.20190923T121155Z.d14ea508da8b7948.0ab69cefeb964ba55b095a2f135bc84a32281e0a"; //See http://api.yandex.com/translate/doc/dg/reference/translate.xml
	public function translate ($text,$lang) {
	  $t 			= urlencode($text);
	  $url 			= "https://translate.yandex.net/api/v1.5/tr/translate?key=";
	  $url			.= "{$this->APIkey}&format=html&lang={$lang}&text={$t}";
	  if ($xml = simplexml_load_file($url)) {
		return $xml;
	  }
	  else return false;
	} // yandex_trans
}

$handle = fopen("woo.txt", "r");
$str = file_get_contents("woo.txt");
$langs = ["uk", "ru", "pl"];
$format = ".txt";

foreach($langs as $lang){
$filename = "index" . "_" . $lang . $format;

$rp = fopen($filename, "w");
  
    while (($line = fgets($handle)) !== false) {
        $rest = substr($line, 0, 1) === '"';
        if($rest == true ) {
            $word = substr(strstr($line, '='), 1, strlen($line));
                $ya 	= new yandex();
                $txt = $word;
                $trans = $ya->translate($txt, $lang);
                $done = $trans->text;
            
                $query = str_replace($word,$done,$line);
                fwrite($rp , $query);
             }else fwrite($rp, $line);
    }

    fclose($rp);
    }
    fclose($handle);

Записывает измененный перевод только в первый файл, во второй и третий ничего не пишет, но их создает, подскажите в чем дело, пожалуйста
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Какой-то бредовенький код. $str вообще нигде не используется, зачем он вообще?

$langs = ["uk", "ru", "pl"];
$format = ".txt";
foreach($langs as $lang){
   $file = file("woo.txt");
   foreach($file as $string){
       $word = explode('=',$string)[1];
       $word = !empty($word[1]?$word[1]:'';
       if(!empty($word)){
          $ya = new yandex();
          $txt = $ya->translate($word, $lang);
          $txt = $txt->text;
          $query = str_replace($word,$done,$line);
          file_put_content("index" . "_" . $lang . $format, $query,FILE_APPEND);
       }
       else{
             file_put_content("index" . "_" . $lang . $format, $string,FILE_APPEND);
       }
   }
}
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
Потому что вы один раз открываете "woo.txt" и один раз прогоняете его до конца.
На последующих итерациях цикла - он заново читаться не будет, т.к. его указатель находится в конце. Сбрасывайте указатель в начало на каждой следующей итерации: fseek.
Ну или целиком всё перепишите нормально, без извратов, как куратор выше посоветовал)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽