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";

?>
- Ariën - op 05/04/2018 19:34:19

Doe dat eens op die plaats van die echo. Want $bd hoort gewoon te bestaan.


/* Example usage: Distance and heading from JO60LK to JO61UA: */
$bd = bearing_dist("JO60LK", "JO61UA");
echo $bd[km]."km, ".$bd[deg]."deg";
echo "<pre>".print_r($bd,true)."</pre>";
?>

Heb het er nu onder geplaatst, en krijg nu dit terug op het scherm:

".print_r($bd,true).""; ?>
Moet wel binnen het PHP-blok tussen de php-tags uiteraard ;-)
Het is PHP en het blijft immers PHP.
Bij mij is ie helemaal notice en warning vrij als ik dit doe (oa netjes quootjes om de indices heen)

<?php


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";

?>

Als je nu nog steeds een fout krijgt: op welke regel (van dit script, dan kunnen we mee tellen)?
Hoppa, dit script werkt!

Ik krijg keurig: 84km, 39deg

Ik ga eens die echo bestuderen..

Heel erg bedankt :-)

Reageren