{"id":229868,"date":"2022-11-06T17:25:00","date_gmt":"2022-11-06T14:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229868"},"modified":"2022-11-09T16:44:45","modified_gmt":"2022-11-09T13:44:45","slug":"latitudine-e-longitudine-in-php-alcune-pratiche-utili","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/latitudine-e-longitudine-in-php-alcune-pratiche-utili\/","title":{"rendered":"Latitudine e longitudine in PHP: alcune pratiche utili"},"content":{"rendered":"\n<p>Nei post precedenti, ho scritto un bel po&#8217; su come lavorare con l&#8217; <a href=\"https:\/\/tommcfarlin.com\/tag\/google-maps-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API di Google Maps<\/a>. Sinceramente, non ci ho lavorato da quel post.<\/p>\n<p>Tuttavia, ho dovuto lavorare con la latitudine e la longitudine in PHP e ci sono alcune pratiche che ho iniziato a utilizzare che penso possano essere utili quando si lavora con coordinate o valori in virgola mobile, in generale.<\/p>\n<p>Nel seguente bit di codice, analizzer\u00f2 l&#8217;approccio che ho usato e perch\u00e9 l&#8217;ho fatto. Ma voglio essere chiaro che se stai leggendo questo in relazione all&#8217;API di Google Maps, non c&#8217;\u00e8 molto che posso offrire sul modo in cui funziona e sulla versione attuale della loro API.<\/p>\n<h2>Latitudine e longitudine in PHP<\/h2>\n<p>Ogni volta che lavori con latitudine e longitudine in PHP, lavori con valori in virgola mobile, giusto? Quindi non vuoi mai analizzarli in niente di meno; in caso contrario, stai perdendo dati e non sarai in grado di individuare qualsiasi cosa tu stia cercando di individuare.<\/p>\n<p>Quindi, a tutti gli effetti, supponiamo che tu abbia informazioni che entrano nel server e devi lavorarci usando PHP.<\/p>\n<p>Le due cose che vuoi ricordare sono:<\/p>\n<ol>\n<li>sanificare i dati in entrata,<\/li>\n<li>assicurati che sia convertito in un valore in virgola mobile.<\/li>\n<\/ol>\n<p>Questo pu\u00f2 essere fatto attraverso l&#8217;uso delle funzioni <a href=\"https:\/\/php.net\/manual\/en\/function.filter-var.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filter_var<\/a> e <a href=\"https:\/\/php.net\/manual\/en\/function.floatval.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">floatval<\/a> di PHP di cui parler\u00f2 momentaneamente. Si noti, tuttavia, che se il risultato di <strong>floatval<\/strong> non restituisce una virgola mobile, \u00e8 necessario disporre di un modo grazioso per gestirlo.<\/p>\n<p>Secondo il manuale, <strong>floatval<\/strong> pu\u00f2 restituire quanto segue:<\/p>\n<blockquote>\n<p>Il valore float della variabile data. Gli array vuoti restituiscono 0, gli array non vuoti restituiscono 1. Molto probabilmente le stringhe restituiranno 0 sebbene ci\u00f2 dipenda dai caratteri pi\u00f9 a sinistra della stringa. Si applicano le regole comuni della colata flottante.<\/p>\n<\/blockquote>\n<p>Vedremo come gestirlo con pi\u00f9 grazia pi\u00f9 avanti nel post.<\/p>\n<h3>Analisi di latitudine e longitudine in entrata<\/h3>\n<p>Supponiamo che i valori in entrata siano nella raccolta <a href=\"https:\/\/php.net\/manual\/en\/reserved.variables.request.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_REQUEST<\/a> di PHP (che si riferisce alle richieste HTTP in arrivo al server) con chiavi <strong>acme-demo-latitude<\/strong> e <strong>acme-demo-longitude.\u00a0<\/strong><\/p>\n<p>Possiamo recuperarli in <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-00-retrieving-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questo modo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = $_REQUEST['acme-demo-latitude'];\n$longitude = $_REQUEST['acme-demo-longitude'];<\/code><\/pre>\n<p>Ma questo non basta. Innanzitutto, dobbiamo usare <strong>filter_var<\/strong> per assicurarci che i dati siano disinfettati e seguano <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-01-filtering-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lo schema a virgola mobile<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT\n);\n\n$longitude = filter_var(\n    $_REQUEST['acme-demo-longitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT\n);<\/code><\/pre>\n<p>Successivamente, trovo utile usare <strong>floatval<\/strong> per analizzare il risultato come valore in virgola mobile. Questo lascia il seguente blocco di codice <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-02-parse-the-floating-point-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">simile a questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$latitude  = floatval(\n  filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT) );\n\n$longitude = floatval(\n  filter_var(\n    $_REQUEST['acme-demo-latitude'],\n    FILTER_SANITIZE_NUMBER_FLOAT) );<\/code><\/pre>\n<p>Dopo di che sei libero di usarlo. Ma ricorda, dobbiamo comunque assicurarci che i valori restituiti siano valori in virgola mobile.<\/p>\n<h3>Convalida dei dati<\/h3>\n<p>Ora che abbiamo le informazioni, dobbiamo assicurarci che abbiano un bell&#8217;aspetto. E in caso contrario, dobbiamo gestirlo in modo appropriato. Se non lo \u00e8, allora possiamo semplicemente:<\/p>\n<ol>\n<li>restituisce false dalla funzione da cui \u00e8 contenuto,<\/li>\n<li>lanciare un&#8217;eccezione e consentire al chiamante di gestirla come meglio crede.<\/li>\n<\/ol>\n<p>Ognuno di questi esempi pu\u00f2 assomigliare <a href=\"https:\/\/gist.github.com\/anonymous\/99e718375ec9ad9bbdd6d4c366a40752#file-03-validating-values-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Return false...\nif (! (is_float( $latitude) &amp;&amp; is_float( $longitude) )) {\n  return false;\n}\n\n\/\/ Or throw an exception...\nif (! (is_float( $latitude) &amp;&amp; is_float( $longitude) )) {\n  throw new Exception('Latitude and longitude are not valid floating point values.');\n}\n<\/code><\/pre>\n<p>In definitiva, tuttavia, la decisione \u00e8 tua su come gestire i valori quando non sono nel formato corretto una volta analizzati.<\/p>\n<h2>Queste sono le migliori pratiche?<\/h2>\n<p>Ad essere sincero, ne dubito. So che queste sono le cose che ho usato e che ho trovato utili. Fornisce anche un modo difensivo e resiliente per assicurarsi che i tuoi valori siano corretti.<\/p>\n<p>Ma se ci sono modi migliori per farlo, allora sono aperto a sentirli nei commenti.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ho lavorato con latitudine e longitudine in PHP. Ci sono pratiche che penso ci servano bene quando si lavora con valori in virgola mobile o in virgola mobile.<\/p>\n","protected":false},"author":1,"featured_media":166466,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,844,865],"tags":[1168],"class_list":["post-229868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229868"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229868\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/166466"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}