1) - Ktoś tu zna się na PHP?
2) Mam plik XML o strukturze:
<?xml version="1.0"?>
<MDFile>
<DateTime>
<Date>24.09.10</Date>
<Time>22:23:00</Time>
</DateTime>
<MeteoData>
<Internal>
<IntTemp>22,5</IntTemp>
<IntHumi>57</IntHumi>
<RelPres>989,0</RelPres>
<AbsPres>10101010,0</AbsPres>
<IntDewP>13,5</IntDewP>
</Internal>
<External>
<ExtTemp>14,6</ExtTemp>
<ExtHumi>82</ExtHumi>
<ExtDewP>11,6</ExtDewP>
<WindDir>Południe / Południowy-Wschód</WindDir>
<WindSpd>2,9</WindSpd>
<WindChill>14,1</WindChill>
<Gust>3,7</Gust>
</External>
</MeteoData>
</MDFile>
3) Muszę w najprostszy sposób wyciągnąć daną np. ExtTemp i wyświetlić na stronie
4) Przeglądam tutoriale PHP, ale już mnie kompletnie zaćmiło i nie wiem jak to zorbić :(
5) Please, help...
<?php
$input = file_get_contents('twoj.xml');
if( preg_match('#<ExtTemp>(.*)</ExtTemp>#iU', $input, $matches) )
echo $matches[1];
else
echo 'Nie znaleziono';
?>
Tak na szybko.
Jak otworzyć plik blokowo? Przypuszczalnie mam w delphi kod:
TDataRec = packed record
DanaA : Single;
DanaB : Integer;
i tak dalej...
End;
var
DataRec : Array of TDataRec;
NofRec : LongWord;
...
S:=FileSize(F);
NofRec:= S div 56;
For k:=1 to NofRec do BlockRead(F, DataRec[k-1],56);
...
Jest jakiś odpowiednik BlockRead czy trzeba w pętlach czytać po 56 znaków (pętlami) i do tablicy ładować ??
W C jest funkcja fgets z tego co sprawdziłem w manualu w PHP też, więc powinno zadziałać.
http://php.net/manual/en/function.fgets.php
Jest i fread: http://pl2.php.net/manual/en/function.fread.php
Ewentualnie file_get_contents: http://pl2.php.net/manual/en/function.file-get-contents.php
Została mi jedna rzecz do zrobienia... konwersja daty z DELPHI-owego DateTime do PHP-owego.
Znalazłem w necie taki kodzik:
function DateAdd($interval, $number, $date)
{
$date_time_array = getdate($date);
$hours = $date_time_array['hours'];
$minutes = $date_time_array['minutes'];
$seconds = $date_time_array['seconds'];
$month = $date_time_array['mon'];
$day = $date_time_array['mday'];
$year = $date_time_array['year'];
switch ($interval) {
case 'yyyy':
$year+=$number;
break;
case 'q':
$year+=($number*3);
break;
case 'm':
$month+=$number;
break;
case 'y':
case 'd':
case 'w':
$day+=$number;
break;
case 'ww':
$day+=($number*7);
break;
case 'h':
$hours+=$number;
break;
case 'n':
$minutes+=$number;
break;
case 's':
$seconds+=$number;
break;
}
$timestamp= mktime($hours,$minutes,$seconds,$month,$day,$year);
return $timestamp;
}
function ConvertDateTime($DelphiTime)
{
$Days = intval($DelphiTime);
$Fraction = $DelphiTime - $Days;
$Seconds = $Fraction / (1/24/60/60);
$DateTime = strval(DateAdd("d",$Days,"30/12/1899 00:00:00"));
$DateTime = strval(DateAdd("s",$Seconds,$DateTime));
return $DateTime;
}
Datę pobieram z pliku w formacie http://4programmers.net/Delphi/Double (http://4programmers.net/Delphi/Double) :
$paczka = fread($DAT_plik,56);
$dataczas = unpack('d1DataCzas', substr($paczka, 1, 8));
Gdzie $dataczas - zmienna typu TDateTime przechowuje ilość dni, które upłynęły od 30 grudnia 1899 roku (w Delphi).
Wywołanie w PHP:
echo '<br>'.ConvertDateTime($dataczas['DataCzas']);
Daje błąd:
Cytat: 'PHP'Notice: A non well formed numeric value encountered in C:\meteo\unit1.php on line 22
czyli w linii:
$date_time_array = getdate($date);
Manual nie gryzie...
http://pl2.php.net/manual/en/function.getdate.php :
Cytatarray getdate ([ int $timestamp = time() ] )
Returns an associative array containing the date information of the timestamp, or the current local time if no timestamp is given.
Widzisz, jaki on tam parametr przyjmuje?