Categories
PHP ГНСС Упътвания

Нови поддържани формати – CSV и GPX

Добавена е поддръжка на два нови формата в модула за конвертиране на геодезически файлове – CSV и GPX.

Форматът на CSV (comma separated values) файловете трябва да бъде point,lat,lon,heigh,description като последните две колони не са засължителни.

Изходният формат е GPX (GPS Exchange Format) за GARMIN GPS.

 

Categories
PHP Геодезия

Конвертиране на геодезически файлове

Проект за конвертиране на различни геодезически файлове (KPT, DINI, DPI, KOR, CAD) във универсални формати като TXT, XML, JSON и KML.

Проектът е с отворен код и е достъпен на адрес https://github.com/Nanich87/Survey-Format-Conversion-Factory

Categories
PHP

Онлайн сваляне на клипове от Vbox7

Описание:

Сайт за сваляне на видео клипове от vbox7.com

Връзка:

Vbox7 Downloader Online

Изходен код:

https://github.com/Nanich87/Vbox7-Downloader

Изглед:

online-vbox7-downloader
Categories
PHP

Survey Format Conversion Factory

Фабриката за преобразуване на файлове с геодезически измервания се премести в GitHub!

https://github.com/Nanich87/Survey-Format-Conversion-Factory

Categories
PHP

Конвертиране от DINI21 към TXT или XML

Преобразуване на файлове от дигитален нивелир DINI21 към XML или TXT файл

Базов код на PHP:

<?php
$submit_button = "Преобразуване";
$upload_dir = "./upload";
$output_file = "";

if (
    isset($_POST["submit"], $_POST["format"]) &&
    $_POST["submit"] === $submit_button
) {
    if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
        $old_filename = htmlentities(
            $_FILES["file"]["name"],
            ENT_QUOTES,
            "UTF-8"
        );
        $new_filename = sprintf(
            "%s_%s.txt",
            md5($_FILES["file"]["name"]),
            time()
        );
        if (
            move_uploaded_file(
                $_FILES["file"]["tmp_name"],
                $upload_dir . DIRECTORY_SEPARATOR . $new_filename
            )
        ) {
            $input_file = file_get_contents(
                $upload_dir . DIRECTORY_SEPARATOR . $new_filename
            );
            unlink($upload_dir . DIRECTORY_SEPARATOR . $new_filename);
            $file_formats = [
                "TXT" => "txt",
                "XML" => "xml",
            ];
            $file_format = isset($file_formats[$_POST["format"]])
                ? $file_formats[$_POST["format"]]
                : $file_formats["TXT"];
            if (
                preg_match_all(
                    "/(\d+\s+Start-Line\s+BF\s+\d+)(.*?)(\d+\s+End-Line\s+\d+)/ism",
                    $input_file,
                    $matches
                )
            ) {
                if ($file_format == "xml") {
                    $output_file = "";
                    $output_file .= "";
                    $output_file .= "1";
                    $output_file .= "";
                    $output_file .= "";
                }
                foreach ($matches[0] as $line) {
                    $line = explode("\n", $line);
                    $back_benchmark = null;
                    $forward_benchmark = null;
                    $elevation = null;
                    $length = null;
                    for ($i = 1; $i < count($line) - 3; $i++) {
                        if ($i % 3 == 0) {
                            $rb = explode(
                                " ",
                                preg_replace(
                                    "/\s\s+/",
                                    " ",
                                    trim($line[$i - 1])
                                )
                            );
                            $rf = explode(
                                " ",
                                preg_replace("/\s\s+/", " ", trim($line[$i]))
                            );
                            if ($rb[1] != "X" && $rf[1] == "X") {
                                $back_benchmark = $rb[1];
                                $elevation += $rb[5] - $rf[5];
                                $length += $rb[7] + $rf[7];
                                continue;
                            } elseif ($rb[1] == "X" && $rf[1] == "X") {
                                $elevation += $rb[5] - $rf[5];
                                $length += $rb[7] + $rf[7];
                                continue;
                            } elseif ($rb[1] == "X" && $rf[1] != "X") {
                                $forward_benchmark = $rf[1];
                                $elevation += $rb[5] - $rf[5];
                                $length += $rb[7] + $rf[7];
                            } else {
                                $back_benchmark = $rb[1];
                                $forward_benchmark = $rf[1];
                                $elevation = $rb[5] - $rf[5];
                                $length = $rb[7] + $rf[7];
                            }
                            if ($file_format == "xml") {
                                $output_file .= "";
                                $output_file .= "" . $back_benchmark . "";
                                $output_file .= "" . $forward_benchmark . "";
                                $output_file .= "" . $elevation . "";
                                $output_file .= "" . $length . "";
                                $output_file .= "0";
                                $output_file .= "";
                                $output_file .= "\n";
                            } else {
                                $output_file .= sprintf(
                                    "%s %s %1.4f %1.2f 0\n",
                                    $back_benchmark,
                                    $forward_benchmark,
                                    $elevation,
                                    $length
                                );
                            }
                            $elevation = 0;
                            $length = 0;
                        }
                    }
                }
                if ($file_format == "xml") {
                    $output_file .= "";
                    $output_file .= "";
                }
            }
        } else {
            echo "Възникнала е грешка при качването на Файла " .
                $old_filename .
                "";
        }
    } else {
        echo "Няма избран файл за качване!";
    }
}
Categories
PHP

Защита срещу SQL инжекции

SQL инжекциите са техника за атакуване на приложения, използващи SQL бази данни, чрез вмъкване на злонамерени SQL команди в заявките, генерирани от приложението.

Данни, подавани от потребителя винаги трябва да бъдат валидирани от приложението преди да бъдат използвани в SQL конструкции.

Първата стъпка при защита от SQL инжекции е валидацията на входните данни.

Валидацията представлява проверка дали входните данни, въвеждани от потребителя, отговарят на очакваните данни от приложението.

Пример за валидация е проверка дали потребителското име съдържа само символи от A до Z и цифри от 0 до 9, ако само тези символи са заложени като валидни в приложението при въвеждане на потребителско име.

За проверка може да се използва следният регулярен израз (шаблон) в комбинация с функцията preg_match() в PHP:

If (preg_match("/^[a-z0-9]+$/ui", $username)) {
echo 'потребителското име е валидно';
} else {
echo 'потребителското име не е валидно';
}

Ако функцията върне true, потребителското име е валидно.

Втората стъпка при защитата от SQL инжекции са така наречените готови конструкции (prepared statements). Използването им предотвратява на 100 процента възможността от атакуване с SQL инжекции. Това е така, защото заявките предварително се обработват от MySQL сървъра без да бъдат подавани потребителските данни и злонамереният потребител няма възможност да манипулира SQL конструкцията.

Categories
PHP

Разлика между Include и Require в PHP

Двете функции са идентични с една основна разлика – при възникване на грешка.

Require ще предизвика фатална грешка от тип E_COMPILE_ERROR и ще прекъсне изпълнението на скрипта.

Include ще предизвика грешка от тип E_WARNING, но изпълнението на скрипта ще продължи.

Categories
PHP

Трансформация от WGS 84 към UTM

Преобразуване от географски координати (WGS84) към проекционни координати (WGS84/UTM 35N)

Връзка: Трансформация на координатни системи

За трансформацията е използвана библиотека Proj4js.

Proj4js е библиотека, написана на JavaScript, за трансформация на координати от една координатна система в друга, включваща и трансформация на геодезически референтни системи (datum transformations)

Categories
PHP

Трансформация на координати

Поддържат се следните видове трансформации:

  • Трансформация на Декартови координати – включва афинна и хелмертова трансформации
  • Трансформация от географски координати в проекционни координати – Гаусова проекция

Структура на примерен входен файл за трансформация на Декартови координати:

1 92352.439 20359.231 84778.635 26014.364
2 84759.620 17042.702 85622.843 17771.625
3 88697.044 17379.409 86502.430 21624.425
4 85000.000 18000.000 84784.346 18292.392
5 87829.343 17421.001 86199.260 20810.372
6 87447.424 18177.309

Файлът може да съдържа до 50 общи точки (commonPoint) и до 500 входни точки (inputPoint).

В inputCoordinateSystem се записват координатите на точките във входната координатна система, а в outputCoordinateSystem – в изходната координатна система.

Структура на примерен входен файл за трансформация от географски координати в проекционни координати (Гаусова проекция):

Categories
PHP

PHP клас за сваляне на видео файлове от Vbox7

Описание:

Това е работещ клас на PHP за сваляне на видео файлове от VBOX7.

Използва CURL за изпращане на POST REQUEST, който връща директния URL адрес към видео файла.

Този клас може да се ползва и модифицира без никакви ограничения.

Автор: GNNMobile.eu

Код:

Пример:

$vbox = new Vbox7;
$vbox->setVideo($_POST['video']);

if ($vbox->execute()) { 
    echo '<a href="'.$vbox->getVideo().'">свали видео файл</a>'; 
}