я. Что касается метода «Breadcrumbs»
Ниже приведена функция в C, которая учитывает # 1 и # 2:
double calcDistanceByHaversine(double rLat1, double rLon1, double rHeading1,
double rLat2, double rLon2, double rHeading2){
double rDLatRad = 0.0;
double rDLonRad = 0.0;
double rLat1Rad = 0.0;
double rLat2Rad = 0.0;
double a = 0.0;
double c = 0.0;
double rResult = 0.0;
double rEarthRadius = 0.0;
double rDHeading = 0.0;
double rDHeadingRad = 0.0;
if ((rLat1 < -90.0) || (rLat1 > 90.0) || (rLat2 < -90.0) || (rLat2 > 90.0)
|| (rLon1 < -180.0) || (rLon1 > 180.0) || (rLon2 < -180.0)
|| (rLon2 > 180.0)) {
return -1;
};
rDLatRad = (rLat2 - rLat1) * DEGREE_TO_RADIANS;
rDLonRad = (rLon2 - rLon1) * DEGREE_TO_RADIANS;
rLat1Rad = rLat1 * DEGREE_TO_RADIANS;
rLat2Rad = rLat2 * DEGREE_TO_RADIANS;
a = sin(rDLatRad / 2) * sin(rDLatRad / 2) + sin(rDLonRad / 2) * sin(
rDLonRad / 2) * cos(rLat1Rad) * cos(rLat2Rad);
if (a == 0.0) {
return 0.0;
}
c = 2 * atan2(sqrt(a), sqrt(1 - a));
rEarthRadius = 6378.1370 - (21.3847 * 90.0 / ((fabs(rLat1) + fabs(rLat2))
/ 2.0));
rResult = rEarthRadius * c;
// Chord to Arc Correction based on Heading changes. Important for routes with many turns and U-turns
if ((rHeading1 >= 0.0) && (rHeading1 < 360.0) && (rHeading2 >= 0.0)
&& (rHeading2 < 360.0)) {
rDHeading = fabs(rHeading1 - rHeading2);
if (rDHeading > 180.0) {
rDHeading -= 180.0;
}
rDHeadingRad = rDHeading * DEGREE_TO_RADIANS;
if (rDHeading > 5.0) {
rResult = rResult * (rDHeadingRad / (2.0 * sin(rDHeadingRad / 2)));
} else {
rResult = rResult / cos(rDHeadingRad);
}
}
return rResult;
}
II.
Средняя скорость.
Trip_distance = Trip_average_speed * Trip_time
Поскольку скорость GPS определяется эффектом Допплера и не имеет прямого отношения к [Lon, Lat], его можно, по крайней мере, считать вторичным (резервное копирование или исправление), если не как метод расчета основного расстояния.
Это всегда работает для меня:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Однако это не делает PHP для отображения ошибок синтаксического анализа - единственный способ показать эти ошибки - это изменить ваш php.ini с помощью этой строки:
display_errors = on
Некоторые веб-хостинг-провайдеры позволяют вам изменять PHP-параметры в файле .htaccess.
Вы можете добавить следующую строку:
php_value display_errors 1
У меня была такая же проблема, как у вас и это решение зафиксировало это.
Чтобы отобразить все ошибки, вам необходимо:
1. Возьмите эти строки в скрипте PHP, который вы вызываете из браузера (обычно index.php
):
error_reporting(E_ALL);
ini_set('display_errors', 1);
2. (a) Убедитесь, что этот скрипт не имеет синтаксических ошибок
-or -
2. (b) Установите display_errors = On
в свой php.ini
В противном случае он даже не сможет запустить эти 2 Строки!
Вы можете проверить наличие синтаксических ошибок в вашем скрипте, запустив (в командной строке):
php -l index.php
Если вы включили , сценарий из другой скрипт PHP, то он будет отображать синтаксические ошибки в включенном скрипте . Например:
index.php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Any syntax errors here will result in a blank screen in the browser
include 'my_script.php';
my_script.php
adjfkj // This syntax error will be displayed in the browser
Вы можете сделать что-то вроде ниже:
Установить ниже параметров в вашем основном файле индекса
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Затем, исходя из вашего требования, вы можете выбрать, который вы хотите показать:
Для всех ошибок, предупреждений и уведомлений
error_reporting(E_ALL); OR error_reporting(-1);
Для всех ошибок
error_reporting(E_ERROR);
Для всех предупреждений
error_reporting(E_WARNING);
For All Notice
error_reporting(E_NOTICE);
Для получения дополнительной информации проверьте здесь
Я бы обычно пошел со следующим кодом в моем простом проекте php, который очень мал, если проект станет большим, тогда я рекомендую.
if(!defined('ENVIRONMENT')){
define('ENVIRONMENT','DEVELOPMENT');
}
$base_url = null;
if (defined('ENVIRONMENT'))
{
switch (ENVIRONMENT)
{
case 'DEVELOPMENT':
$base_url = 'http://localhost/product/';
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(E_ALL|E_STRICT);
break;
case 'PRODUCTION':
$base_url = 'Prod url'; /* https://google.com */
error_reporting(0);
/* Mechanism to log errors */
break;
default:
exit('The application environment is not set correctly.');
}
}
Надеюсь, это поможет.
Если вы каким-то образом оказались в ситуации, когда вы не можете модифицировать настройку с помощью php.ini
или .htaccess
, вам не повезло, если вы обнаружите ошибки, когда ваши скрипты PHP содержат ошибки синтаксического анализа. Затем вам нужно разрешить перебирать файлы в командной строке следующим образом:
find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"
Если ваш хост заблокирован, что он не позволяет изменять значение через php.ini
или .htaccess
, он также может запретить изменение значения через ini_set
. Вы можете проверить это со следующим скриптом PHP:
<?php
if( !ini_set( 'display_errors', 1 ) ) {
echo "display_errors cannot be set.";
} else {
echo "changing display_errors via script is possible.";
}
find . -name '*.php' -type f -exec php -l {} \; | grep -v 'No syntax errors detected'
проще
– scones
24 November 2017 в 14:27
Вы не можете улавливать ошибки разбора при включении вывода ошибок во время выполнения, потому что он анализирует файл до фактического выполнения чего-либо (и поскольку он обнаруживает ошибку во время этого, он ничего не выполнит). Вам нужно будет изменить фактическую конфигурацию сервера, чтобы display_errors был включен, и использовался соответствующий уровень error_reporting. Если у вас нет доступа к php.ini, вы можете использовать .htaccess или подобное, в зависимости от сервера.
Этот вопрос может предоставить дополнительную информацию.
Возможно, вы обнаружите, что все настройки для «сообщений об ошибках» или «ошибок отображения» не работают в PHP & nbsp; 7. Это связано с тем, что обработка ошибок изменилась. Попробуйте это вместо:
try{
// Your code
}
catch(Error $e) {
$trace = $e->getTrace();
echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
Или, чтобы поймать исключения и ошибки за один раз (это не обратно совместимо с PHP & nbsp; 5):
try{
// Your code
}
catch(Throwable $e) {
$trace = $e->getTrace();
echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
try{} catch() {}
всюду в вашем уже определенном php-коде, я даже не хочу думать, что это будет беспорядок.
– vdegenne
22 January 2017 в 12:22
$bt = debug_backtrace(); print_r($bt);
.
– Frank Forte
23 March 2017 в 04:25
Error
. Если вы переписываете все запросы (за исключением, может быть, JavaScript, CSS, изображения и т. Д.) В файл index.php, то там есть блок catch try, это упрощает. Да, любая система, которая не имеет ни одной точки входа, будет основной головной болью для обновления.
– Frank Forte
23 March 2017 в 04:28
Внутри вашего php.ini:
display_errors = on
Затем перезапустите веб-сервер.
sudo service apache2 restart
– Peter Krauss
1 September 2015 в 13:04
Loaded Configuration File
– Frankenmint
24 July 2016 в 04:56
Если, несмотря на все приведенные выше ответы (или вы не можете отредактировать файл php.ini), вы по-прежнему не можете получить сообщение об ошибке, попробуйте создать новый файл PHP, который позволяет сообщать об ошибках, а затем включить файл проблемы. например:
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');
Несмотря на то, что все все правильно установлено в моем php.ini
файле, это был единственный способ поймать ошибку пространства имен. Мой точный сценарий был:
//file1.php
namespace a\b;
class x {
...
}
//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
...
}
Вы можете добавить свой собственный обработчик ошибок, который может предоставить дополнительную информацию об отладке. Кроме того, вы можете настроить его для отправки по электронной почте.
function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
$msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br>
<b>File:</b> $errfile <br>
<b>Line:</b> $errline <br>
<pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";
echo $msg;
return false;
}
function EXC_HANDLER($exception){
ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine());
}
function shutDownFunction() {
$error = error_get_last();
if ($error["type"] == 1) {
ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]);
}
}
set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");
При использовании PHP в качестве модуля Apache мы можем изменить параметры конфигурации с помощью директив в файлах конфигурации Apache (например, httpd.conf) и .htaccess. Для этого вам понадобятся «AllowOverride Options» или «AllowOverride All».
Проверьте это
<?php
// Turn off error reporting
error_reporting(0);
// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Report all errors
error_reporting(E_ALL);
// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?
>
Пока ваш сайт жив, файл php.ini должен отключить display_errors по соображениям безопасности. Однако для среды разработки display_errors можно включить для устранения неполадок.
Поскольку мы теперь запускаем PHP7, ответы, приведенные здесь, не верны. Единственный, все еще в порядке, тот, что у Фрэнка Форте, поскольку он говорит о PHP7. С другой стороны, вместо того, чтобы пытаться поймать ошибку с помощью try / catch, вы можете использовать трюк: use include. Здесь три части кода:
Файл: tst1.php
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>
Запуск этого в PHP7 ничего не покажет
Теперь попробуйте следующее:
Файл: tst2.php
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include ("tst3.php");
?>
Файл: tst3.php
<?php
// Missing " and ;
echo "Testing
?>
Теперь запустите tst2, который установит отчет об ошибках, затем включите tst3. Вы увидите:
Ошибка анализа: синтаксическая ошибка, неожиданный конец файла, ожидающая переменная (T_VARIABLE) или $ {(T_DOLLAR_OPEN_CURLY_BRACES) или {$ (T_CURLY_OPEN) в tst3.php в строке 4
, если у вас установлен xdebug, вы можете переопределить все настройки, установив:
xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;
force_display_errors
Тип: int, Значение по умолчанию: 0, введено в Xdebug> = 2.3 Если этот параметр установлен в 1, тогда всегда будут отображаться ошибки, независимо от того, что такое настройка отображения display_errors.
force_error_reporting
Тип: int, Значение по умолчанию: 0, Введен в Xdebug> = 2.3 Этот параметр является битовой маской, например error_reporting. Эта битовая маска будет логически ORed с битовой маской, представленной error_reporting, на dermine, где должны отображаться ошибки. Этот параметр можно сделать только в php.ini и позволяет принудительно отображать определенные ошибки независимо от того, что делает приложение с помощью ini_set ().
blockquote>
Вот скрипт PHP:
<?php
ini_set("display_startup_errors", 1);
ini_set("display_errors", 1);
/* Reports for either E_ERROR | E_WARNING | E_NOTICE | Any Error*/
error_reporting(E_ALL);
echo(abc); /* Notice: abc is an undefined constant */
?>
Для более подробного объяснения ошибок PHP посетите страницу Ошибка PHP - error_reporting () .
Вот что я узнал. В файле PHP.INI
error_reporting = E_ALL
display_errors = On
Установите это в index.php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Этот код сверху должен работать error_reporting (E_ALL);
Однако попытайтесь отредактировать код на телефоне в файле
error_reporting = on
Лучшее / простое / быстрое решение, которое вы можете использовать, если это быстрая отладка, заключается в том, чтобы окружить ваш код захватывающими исключениями. Это то, что я делаю, когда хочу что-то быстро проверить на производстве.
try {
//Page code
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Надеюсь, это поможет.
catch (Throwable $e)
... Или другой блок catch под catch(Error $e)
– Frank Forte
19 August 2017 в 02:58
php_flag display_errors 1
для .htaccess – Ryan Taylor 9 July 2015 в 21:58