Hallo allen,

Ik ben nu al een week aan het zoeken waarom het scriptje dat ik heb niet draait.

De server draait met Ubuntu 16.04LTS server, en daar draait PHP 7 op.
Ik krijg totaal geen output van dit script.
Nu heb ik wel gelezen dat er mogelijk dingen zijn veranderd in syntaxing tov php5, maar ik weer nu echt even niet waar ik het in moet zoeken.


Het gaat om het volgende script:


<?
/*
* PHP code snippet to calculate the distance and bearing between two
* maidenhead QTH locators.
*
* Written by Fabian Kurz, DJ1YFK; losely based on wwl+db by VA3DB.
*
* You can do whatever you want with this code.
*
*/


function valid_locator ($loc) {
if (ereg("^[A-R]{2}[0-9]{2}[A-X]{2}$", $loc)) {
return 1;
}
else {
return 0;
}
}

function loc_to_latlon ($loc) {
/* lat */
$l[0] =
(ord(substr($loc, 1, 1))-65) * 10 - 90 +
(ord(substr($loc, 3, 1))-48) +
(ord(substr($loc, 5, 1))-65) / 24 + 1/48;
$l[0] = deg_to_rad($l[0]);
/* lon */
$l[1] =
(ord(substr($loc, 0, 1))-65) * 20 - 180 +
(ord(substr($loc, 2, 1))-48) * 2 +
(ord(substr($loc, 4, 1))-65) / 12 + 1/24;
$l[1] = deg_to_rad($l[1]);

return $l;
}



function deg_to_rad ($deg) {
return (M_PI * $deg/180);
}

function rad_to_deg ($rad) {
return (($rad/M_PI) * 180);
}

function bearing_dist($loc1, $loc2) {

if (!valid_locator($loc1) || !valid_locator($loc2)) {
return 0;
}

$l1 = loc_to_latlon($loc1);
$l2 = loc_to_latlon($loc2);

$co = cos($l1[1] - $l2[1]) * cos($l1[0]) * cos($l2[0]) +
sin($l1[0]) * sin($l2[0]);
$ca = atan2(sqrt(1 - $co*$co), $co);
$az = atan2(sin($l2[1] - $l1[1]) * cos($l1[0]) * cos($l2[0]),
sin($l2[0]) - sin($l1[0]) * cos($ca));

if ($az < 0) {
$az += 2 * M_PI;
}

$ret[km] = round(6371*$ca);
$ret[deg] = round(rad_to_deg($az));

return $ret;
}

/* Example usage: Distance and heading from JO60LK to JO61UA: */
$bd = bearing_dist("JO60LK", "JO61UA");
echo "$bd[km]km, $bd[deg]deg";

?>
Als je foutafhandeling aanzet, dan zou je de errors moeten zien.
Inderdaad, een compleet blanke pagina wil zeggen dat er iets niet pluis is, in de errorlogs kun je dan meestal terugvinden wat er aan scheelt.

Ook het aanzetten van het melden+weergeven van fouten (wat in wezen de error(log)s direct op je scherm toont, zodat je niet in aparte bestanden hoeft te gaan graven) kan inzicht verschaffen.

Dit doe je als volgt (zet de volgende snippet bovenaan in het script):
<?php
error_reporting(E_ALL); // welke fouten je wilt tonen (alle)
ini_set('display_errors', 'stdout'); // waar je fouten wilt tonen (het scherm)
?>


En zoals @Jacco aangeeft is ereg() vervallen in PHP 7 (en al sinds PHP 5.3 deprecated).

Een alternatieve implementatie van valid_locator() zou zoiets moeten zijn:
<?php
function valid_locator ($loc) {
    return preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}$/', $loc) === 1;
}
?>

edit: delimiters toegevoegd zoals @Rob terecht aanhaalde, dat is het nadeel van aangedragen oplossingen niet testen :s
Thomas van den Heuvel op 03/04/2018 16:39:29

Een alternatieve implementatie van valid_locator() zou zoiets moeten zijn:
<?php
function valid_locator ($loc) {
    return preg_match('^[A-R]{2}[0-9]{2}[A-X]{2}$', $loc) === 1;
}
?>


Maar dan met delimiters:
preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}$/', $loc)


Hallo allen, wat een reacties geweldig.
Voor mij is PHP echt helemaal een nieuwe wereld, ik ben er nu 2 weken mee bezig om een mysql database uit te lezen.
Dat is inmiddels helemaal gelukt :-), elke dag leer ik weer wat nieuws.
Ik ga me zeker meer verdiepen in de error handeling, zeer nutting inderdaad.

Vanavond zal ik eens kijken of het stukje code van Thomas, en de eventuele aanpassing van Rob soelaas biedt.
In iedergeval heel erg bedankt voor het mee denken :-)

Ik heb vanmiddag even tijd gehad om het aangepaste script te testen.
Echter is krijg er geen data uit..

Ik heb het stukje script toegevoegd van Thomas wat betreft de error reporting.
En ik heb het preg_match stukje toegepast. met en zonder de aanpassing van Rob.
het scherm blijft blank, en ik zie ook geen error output verschijnen.

Het ziet er nu als volgt uit:

<?php
error_reporting(E_ALL); // welke fouten je wilt tonen (alle)
ini_set('display_errors', 'stdout'); // waar je fouten wilt tonen (het scherm)
?>
<?
/*
* PHP code snippet to calculate the distance and bearing between two
* maidenhead QTH locators.
*
* Written by Fabian Kurz, DJ1YFK; losely based on wwl+db by VA3DB.
*
* You can do whatever you want with this code.
*
*/



function valid_locator($loc) {
return preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}$/', $loc) === 1;
}


function loc_to_latlon ($loc) {
/* lat */
$l[0] = (ord(substr($loc, 1, 1))-65) * 10 - 90 + (ord(substr($loc, 3, 1))-48) + (ord(substr($loc, 5, 1))-65) / 24 + 1/48;
$l[0] = deg_to_rad($l[0]);
/* lon */
$l[1] = (ord(substr($loc, 0, 1))-65) * 20 - 180 + (ord(substr($loc, 2, 1))-48) * 2 + (ord(substr($loc, 4, 1))-65) / 12 + 1/24;
$l[1] = deg_to_rad($l[1]);

return $l;
}



function deg_to_rad($deg) {
return (M_PI * $deg/180);
}

function rad_to_deg($rad) {
return (($rad/M_PI) * 180);
}

function bearing_dist($loc1, $loc2) {

if (!valid_locator($loc1) || !valid_locator($loc2)) {
return 0;
}

$l1 = loc_to_latlon($loc1);
$l2 = loc_to_latlon($loc2);

$co = cos($l1[1] - $l2[1]) * cos($l1[0]) * cos($l2[0]) + sin($l1[0]) * sin($l2[0]);
$ca = atan2(sqrt(1 - $co*$co), $co);
$az = atan2(sin($l2[1] - $l1[1]) * cos($l1[0]) * cos($l2[0]), sin($l2[0]) - sin($l1[0]) * cos($ca));

if ($az < 0) {
$az += 2 * M_PI;
}

$ret[km] = round(6371*$ca);
$ret[deg] = round(rad_to_deg($az));

return $ret;
}

/* Example usage: Distance and heading from JO60LK to JO61UA: */
$bd = bearing_dist("JO60LK", "JO61UA");
echo "$bd[km]km, $bd[deg]deg";

?>
M.i. moet de regel om te testen zijn:

echo $bd[km]."km, ".$bd[deg]."deg";
Doe eens op het laatste:

<?php
echo "<pre>".print_r($bd,true)."</pre>";
?>

Ik ben benieuwd wat er in de array zit.
- Ariën - op 05/04/2018 19:11:31

Doe eens op het laatste:

<?php
echo "<pre>".print_r($bd,true)."</pre>";
?>

Ik ben benieuwd wat er in de array zit.


Hier krijg ik de volgende melding op:
Notice: Undefined variable: bd in /html/logbook/loc_calc.php on line 72

Dit met het originele script en het stukje aangepast met dan van Jan te Pas
Doe dat eens op die plaats van die echo. Want $bd hoort gewoon te bestaan.

Reageren