В случае, если кому-то нужно прочитать имена и значения констант, определенные в данном файле .php, в массив переменных без фактического определения этих констант (например, если ранее была определена какая-то другая константа с тем же именем, что выдает ошибку, когдаобработав файл с помощью include
или require
), вот как я это сделал (Внимание: у меня еще не было проблем, но он не был тщательно протестирован, поэтому он может содержать ошибки).
if (file_exists($filename)){
$outf=fopen($filename,'r');
while (($line=fgets($outf))!==false){
if (strpos($line, 'define')!==false){
$parts=explode("\"",implode("\"",explode("'",implode("\\q",explode("\\\"",implode("\\s",explode("\\'",$line)))))));
$name=implode("\\'",explode("\\s",implode("\\\"",explode("\\q",$parts[1]))));
$value=implode("\\'",explode("\\s",implode("\\\"",explode("\\q",$parts[3]))));
$outconstants[$name]=$value;
}
}
}
Вы можете видеть, что я предполагаю, что в строке не более 1 define
предложения, и что имена и значения констант указываются как строковые значения с использованием нотации PHP (между одинарными (') или двойными (") кавычками.)
Кроме того, экранированные кавычки (\ "или \ ') временно экранируются как \ q (\") или \ s (\'), чтобы должным образом соответствовать не экранированным, а затем возвращаются обратно.как обычно, однажды то, что находится между неэкранированными, присваивается $ name и $ value.
Проблема с API API Google вместо этого была решена с помощью API-интерфейса перевода Microsoft (бесплатно до 2.000.000 символов / месяц): http://msdn.microsoft.com/en-us/library/ff512421.aspx#phpexample