skAmZ

skAmZ
Рейтинг
122
Регистрация
04.09.2009

Ну это зависит от хостинга, проще всего этот вопрос решать с суппортом, лично у меня на хостинге это включается в админке.

Последнее время в слово «уник» вкладывают не тот смысл =)

ИМХО хватит уника на главной и на 2-м уровне, для принятия решения включать ли сайт в индекс, робот дальше не смотрит.

Установлены ли расширения для работы с json, curl? Для тестирования можно указать error_reporting(E_ALL & ~E_NOTICE); для отслеживания ошибок.

ИМХО дело не в этой функции, правильно ли обрабатывается, результат перевода, при возврате false?

curl_setopt($c, CURLOPT_POST, 0);

Указывает не использовать POST, т.е. GET.

skAmZ добавил 28.02.2010 в 09:40

Извиняюсь, был не прав) Как оказалось используется POST =)

skAmZ добавил 28.02.2010 в 09:42

Собственно, если говорить о подводных камнях Вашего кода, то возможно превышение длины в 5000 символов, при использовании 400 слов, что конечно маловероятно, но возможно.

Вообще для перевода текстов большой длины метод GET не подходит, на него накладываются слишком жесткие ограничения по длине текста.

Я что-то сомневаюсь, что текст их 400 слов пройдет по длине в GET, но утверждать не буду.

В остальном вроде все нормально.

Я предлагаю Вам использовать POST запросы, Google API их тоже поддерживает, и длина переводимого текста 5000 символов, для тестирования переводил 5010 символов – работало, 5100 уж нет, так что он в полнее лоялен.

Привожу код функции которой пользуюсь сам:

function translate($s_text, $s_lang, $d_lang)

{
$url='http://ajax.googleapis.com/ajax/services/language/translate?v=1.0';
$post='q='.urlencode($s_text).'&langpair='.$s_lang.'%7C'.$d_lang.'&key=notsupplied';

$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_REFERER, "http://site.ru/");
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, $post);
$b = curl_exec($c);
curl_close($c);
$json = json_decode($b, true);
if ($json['responseStatus'] != 200)return false;
return $json['responseData']['translatedText'];
}

Собственно для использования этой функции пользуюсь следующим кодом для перевода:

$translate_pos=0;

$translate_result='';
while(strlen($result)>0)
{
if(strlen($result)<5000)
{
$translate_result.=translate($result, $_lang, 'ru');
$translate_pos=5000;
$result='';
}
else
{
$translate_pos=strrpos(substr($result, 0, 5000), '.');
$translate_result.=translate(substr($result, 0, $translate_pos), $_lang, 'ru');
$result=substr($result, $translate_pos);
}
}

Тут $result исходный текст, $_lang – исходный язык текста (к примеру «en» ), в $translate_result результат перевода. В общем переделать для своих целей не проблема. Вкратце: в цикле переводятся цельные предложения, не более 5000 символов. Много какие моменты не рассматриваются, но вроде работает, это просто пример использования.

На счет вашего 2-го вопроса. Сколько я работал с переводом, гугл не разу не блокировал даже при огромном количестве запросов.

ИМХО всегда найдутся умелые ручки, убрать "не нужные" проверки)

Значение по умолчанию присваивается, если значение не присваивается вовсе, однако пустое значение тоже значение. Советую перед вставкой провеять, если значение пустое, то ставить «1».

P.S. или же не присваивать это значение вовсе, если требуется значение по умолчанию.

skAmZ добавил 27.02.2010 в 12:32

Talamat, NULL тоже может быть в качестве значения, если не указано not null в свойстве поля, а если указано, то будет ошибка MySQL)

lowfreq, возможно у вас сервер работает под управлением cgi, на который конструкции htaccess не влияют. У вас хоть в каком-нибудь файле html выполняются конструкции php?

Попробуйте выполнить более простые действия, в файле access.php, к примеру вывести какие-нибудь символы.

Попробуйте вместо HTML страницы выполнить тоже самое в php файле.

Перед require "access.php"; напишите error_reporting(E_ALL);

Не давно тоже столкнулся с проблемой с .htaccess. Проблема в том, что в файле .htaccess отказывались работать конструкции RewriteRule, если расширение страницы, не html или вообще без такового.

Всего: 1653