Script draait niet onder PHP7
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?
/*
* 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";
?>
/*
* 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.
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):
Code (php)
1
2
3
4
2
3
4
<?php
error_reporting(E_ALL); // welke fouten je wilt tonen (alle)
ini_set('display_errors', 'stdout'); // waar je fouten wilt tonen (het scherm)
?>
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:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function valid_locator ($loc) {
return preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}$/', $loc) === 1;
}
?>
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
Gewijzigd op 03/04/2018 22:57:35 door Thomas van den Heuvel
Thomas van den Heuvel op 03/04/2018 16:39:29:
Een alternatieve implementatie van valid_locator() zou zoiets moeten zijn:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function valid_locator ($loc) {
return preg_match('^[A-R]{2}[0-9]{2}[A-X]{2}$', $loc) === 1;
}
?>
function valid_locator ($loc) {
return preg_match('^[A-R]{2}[0-9]{2}[A-X]{2}$', $loc) === 1;
}
?>
Maar dan met delimiters:
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 :-)
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:
Code (php)
1
2
3
4
2
3
4
<?php
error_reporting(E_ALL); // welke fouten je wilt tonen (alle)
ini_set('display_errors', 'stdout'); // waar je fouten wilt tonen (het scherm)
?>
error_reporting(E_ALL); // welke fouten je wilt tonen (alle)
ini_set('display_errors', 'stdout'); // waar je fouten wilt tonen (het scherm)
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?
/*
* 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";
?>
/*
* 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";
?>
echo $bd[km]."km, ".$bd[deg]."deg";
Ik ben benieuwd wat er in de array zit.
- Ariën - op 05/04/2018 19:11:31:
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
Gewijzigd op 05/04/2018 19:29:33 door Bjorn Pas
Doe dat eens op die plaats van die echo. Want $bd hoort gewoon te bestaan.
- 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).""; ?>
Het is PHP en het blijft immers PHP.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?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";
?>
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)?
Ik krijg keurig: 84km, 39deg
Ik ga eens die echo bestuderen..
Heel erg bedankt :-)
Gewijzigd op 05/04/2018 19:47:05 door Bjorn Pas