Ошибка PHP при попытке обновить таблицу [duplicate]

я. Что касается метода «Breadcrumbs»

  1. Радиус Земли различен на разных латах. Это должно быть учтено в алгоритме Хаверсина
  2. . Рассмотрим изменение подшипника, которое превращает прямые в арки (которые длиннее)
  3. . С учетом изменения скорости арки преобразуются в спирали ( которые длиннее или короче арки).
  4. Изменение высоты повернет плоские спирали к трехмерным спиралям (которые длиннее). Это очень важно для холмистых областей.

Ниже приведена функция в 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], его можно, по крайней мере, считать вторичным (резервное копирование или исправление), если не как метод расчета основного расстояния.

1375
задан Peter Mortensen 27 December 2016 в 16:20
поделиться

23 ответа

Это всегда работает для меня:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Однако это не делает PHP для отображения ошибок синтаксического анализа - единственный способ показать эти ошибки - это изменить ваш php.ini с помощью этой строки:

display_errors = on
2551
ответ дан tleb 18 August 2018 в 03:47
поделиться
  • 1
    Также обратите внимание, что вы можете использовать эти 3 строки, а затем включить ('fileImWorkingOn.php') ;. Тогда вы также можете поймать синтаксические ошибки! – Snap 8 May 2015 в 18:11
  • 2
    Это не отображает ошибки разбора – Bsienn 1 June 2015 в 10:35
  • 3
    Хотя я не SysOps, я думаю, что у большего числа людей есть файл .htaccess, чем php.ini, и они оба придут до разбора, верно? php_flag display_errors 1 для .htaccess – Ryan Taylor 9 July 2015 в 21:58
  • 4
    Итак, теперь, когда ошибки регистрируются, куда они идут? Я пошел в / var / log / apache2, и он показывает все журналы, но нет информации о программе, которую я недавно запускал. Я получаю информацию о перезагрузке системы только каждое утро. – Michael 17 May 2016 в 15:14
  • 5
    @Michael Ошибки идут прямо на экран или туда, где выход перенаправляется на – Fancy John 18 May 2016 в 05:35

Некоторые веб-хостинг-провайдеры позволяют вам изменять PHP-параметры в файле .htaccess.

Вы можете добавить следующую строку:

php_value display_errors 1

У меня была такая же проблема, как у вас и это решение зафиксировало это.

39
ответ дан A.L 18 August 2018 в 03:47
поделиться

Чтобы отобразить все ошибки, вам необходимо:

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
78
ответ дан andre 18 August 2018 в 03:47
поделиться

Вы можете сделать что-то вроде ниже:

Установить ниже параметров в вашем основном файле индекса

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

Для получения дополнительной информации проверьте здесь

8
ответ дан Binit Ghetiya 18 August 2018 в 03:47
поделиться

Я бы обычно пошел со следующим кодом в моем простом проекте 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.');
    }
}

Надеюсь, это поможет.

7
ответ дан Channaveer Hakari 18 August 2018 в 03:47
поделиться

Если вы каким-то образом оказались в ситуации, когда вы не можете модифицировать настройку с помощью 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.";
}
9
ответ дан chiborg 18 August 2018 в 03:47
поделиться
  • 1
    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 или подобное, в зависимости от сервера.

Этот вопрос может предоставить дополнительную информацию.

133
ответ дан Community 18 August 2018 в 03:47
поделиться
  • 1
    Не знал этого. Я отредактировал файл php.ini вручную, и теперь он работает. Благодаря! – Abs 27 June 2009 в 20:16

Возможно, вы обнаружите, что все настройки для «сообщений об ошибках» или «ошибок отображения» не работают в 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'];
}
29
ответ дан Frank Forte 18 August 2018 в 03:47
поделиться
  • 1
    Было бы неплохо показать трассировку – Fancy John 17 October 2016 в 05:55
  • 2
    Вы имеете в виду PHP7 или PHP7.1? Я в замешательстве, я пытался, как утвердил утвердительный ответ, и он работает, я думаю, вы предлагаете что-то немного другое ИМХО, действительно «нет обратной совместимости». и если вам нужно изменить полный PHP & lt; 7 и нужно добавить код try{} catch() {} всюду в вашем уже определенном php-коде, я даже не хочу думать, что это будет беспорядок. – vdegenne 22 January 2017 в 12:22
  • 3
    @FancyJohn, это может помочь: $bt = debug_backtrace(); print_r($bt);. – Frank Forte 23 March 2017 в 04:25
  • 4
    @ballangddang, я столкнулся с проблемой с PHP 7.0, где единственный способ получить сообщение об ошибке - использовать блоки try / catch и специально поймать Error. Если вы переписываете все запросы (за исключением, может быть, JavaScript, CSS, изображения и т. Д.) В файл index.php, то там есть блок catch try, это упрощает. Да, любая система, которая не имеет ни одной точки входа, будет основной головной болью для обновления. – Frank Forte 23 March 2017 в 04:28
  • 5
    Не показывает ли PHP необработанные исключения? Довольно уверен, что это так? – Martin Tournoij 5 June 2017 в 02:20

Внутри вашего php.ini:

display_errors = on

Затем перезапустите веб-сервер.

120
ответ дан j0k 18 August 2018 в 03:47
поделиться
  • 1
    +1. На моем mac: /etc/php.ini – Shanimal 1 April 2013 в 04:48
  • 2
    + ①. На моем ubuntu /etc/php5/apache2/php.ini – m93a 23 February 2015 в 18:44
  • 3
    для restart (Debian, Ubuntu и т. д.) sudo service apache2 restart – Peter Krauss 1 September 2015 в 13:04
  • 4
    Для перезагрузки OS X sudo apachectl -k restart. – Pea 10 January 2016 в 20:53
  • 5
    забавный факт: вы можете найти файл php.ini, загруженный, если просто введите phpinfo (); в пустой файл php. это седьмая строка вниз и называется Loaded Configuration File – Frankenmint 24 July 2016 в 04:56

Просто напишите:

error_reporting(-1);
1
ответ дан jewelhuq 18 August 2018 в 03:47
поделиться

Если, несмотря на все приведенные выше ответы (или вы не можете отредактировать файл 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 {
    ...
}
8
ответ дан jxmallett 18 August 2018 в 03:47
поделиться
  • 1
    Нет, отчет об ошибках не является loglevel, это битполе. Использование 999999 - это очень плохое идея, используйте некоторую силу-два минус 1, например 2047! – peterh 17 July 2018 в 13:32
  • 2
    Вы абсолютно правы, @peterh! Я изменил его на E_ALL, так как это позволит сообщать обо всех ошибках (кроме строгих ошибок в php 5.4 и ниже). – jxmallett 18 July 2018 в 02:52

Вы можете добавить свой собственный обработчик ошибок, который может предоставить дополнительную информацию об отладке. Кроме того, вы можете настроить его для отправки по электронной почте.

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");
5
ответ дан lintabá 18 August 2018 в 03:47
поделиться

При использовании PHP в качестве модуля Apache мы можем изменить параметры конфигурации с помощью директив в файлах конфигурации Apache (например, httpd.conf) и .htaccess. Для этого вам понадобятся «AllowOverride Options» или «AllowOverride All».

Проверьте это

http://funbird.co.uk/blog/tech- articals / Linux-тек-articals / включение ошибок дисплей-PHP-через-HTAccess

10
ответ дан mike 18 August 2018 в 03:47
поделиться
<?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 можно включить для устранения неполадок.

0
ответ дан pardeep 18 August 2018 в 03:47
поделиться
  • 1
    Как этот ответ лучше, чем принятый ответ? – hello 24 May 2018 в 13:02
  • 2
    @hello, У этого есть комментарии и отформатирован четким образом. – Michael Beck 5 June 2018 в 21:14

Поскольку мы теперь запускаем 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

8
ответ дан Peter 18 August 2018 в 03:47
поделиться

, если у вас установлен 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 ().

0
ответ дан Peter Haberkorn 18 August 2018 в 03:47
поделиться

Вот скрипт 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 () .

26
ответ дан Peter Mortensen 18 August 2018 в 03:47
поделиться

Вот что я узнал. В файле PHP.INI

error_reporting = E_ALL
display_errors = On
1
ответ дан Salam 18 August 2018 в 03:47
поделиться

Установите это в index.php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
16
ответ дан Sumit Gupta 18 August 2018 в 03:47
поделиться

Этот код сверху должен работать error_reporting (E_ALL);

Однако попытайтесь отредактировать код на телефоне в файле

error_reporting = on

2
ответ дан Wembo Mulumba 18 August 2018 в 03:47
поделиться

Лучшее / простое / быстрое решение, которое вы можете использовать, если это быстрая отладка, заключается в том, чтобы окружить ваш код захватывающими исключениями. Это то, что я делаю, когда хочу что-то быстро проверить на производстве.

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

Надеюсь, это поможет.

3
ответ дан Xakiru 18 August 2018 в 03:47
поделиться
  • 1
    Для php7 лучше catch (Throwable $e) ... Или другой блок catch под catch(Error $e) – Frank Forte 19 August 2017 в 02:58
26
ответ дан Peter Mortensen 6 September 2018 в 18:28
поделиться
26
ответ дан Peter Mortensen 30 October 2018 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: