Заметки

Если вы встретились с ошибкой  "TypeError: f[s] is not a function" при попытке отправить форму с помощью jQuery, то в первую очередь необходимо проверить вашу форму. 

Скорее всего в ней присутствует элемент с именем name="submit", который мешает отправке формы. 

Переименуйте этот элемент и ошибка исчезнет. 

Чтобы проверить, существует ли папка, и если не существует, то создать ее), можно использовать следующую функцию:

function checkDirectory($dir){
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
}

 где $dir - дуть до папки. 

Рассмотрим на примере, когда необходимо добавить в архив содержимое всей папки:

// Get real path for our folder
$rootPath = realpath('путь до папки');

//инициализируем объект
$zip = new ZipArchive();
$zip->open('resultFile.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
//пропускаем директории (они будут добавлены автоматически)
if (!$file->isDir())
{
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);

//Добавляем текущий файлв архив
$zip->addFile($filePath, $relativePath);
}
}

$zip->close();

Источник

Как можно узнать в чем ошибка, если PHP функция simplexml_load_string возвращает false?

Рассмотрим на примере: 

libxml_use_internal_errors(true);
$result = simplexml_load_string("<?xml version='1.0'><root><xml></test>");
if (!$result) {
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}

Что делать, если результат cURL выводится на страницу или в консоль, а необходимо это предотвратить? 

Все просто, достаточно добавить в параметры запуска CURLOPT_RETURNTRANSFER

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Если вы столкнулись с ошибкой  "Start tag expected, '<' not found"  при использовании функции simplexml_load_string, то необходимо проверить следующее: 

  1. Проверить строку, которая подается в функцию simplexml_load_string - начинается ли она действительно ли нужный символ  '<'. Нет ли никаких скрытых символов в начале строки.
  2. Возможно, до того как использовать эту функцию был какой-то вывод в консоль или на страницу.

Если вы встретились с ошибкой “Array and string offset access syntax with curly braces is no longer supported”, то скорее всего перешли в старом проекте на более новую версию PHP. 

Хорошая новость в том, что исправить данную ошибку достаточно просто.

Дело в том, что в PHP теперь не поддерживается обращение к элементам массива через фигурные скобки, поэтому их надо заменить на квадратные.

Пример: 

$myArray = [1,2,3,4,5];
$myArray{2}; // Ошибка
$myArray[2]; // Правильно

Если вы встретили ошибку “PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function set_error_handler::{closure}(), 4 passed in …”

Дело в том, что в PHP 8 на обработчик ошибки подается на 1 параметр меньше, поэтому если ваша функция принимала 5 параметров, то для php 8 необходимо последний параметр удалить, и тогда все заработает. 

Если вы столкнулись с ошибкой "The port ххх is already in use", где ххх - это любое число, то самый простой способ это сделать - это сначала узнать, какой процесс занимает данный порт, а потом завершить этот процесс. 

Как это можно сделать описано в другой статье: 

Есть несколько причин, почему может возникать данная ошибка.

Возможные решения: 

Ваш диск переполнен.

 Просто удалите какие-либо ненужные файлы, чтобы освободить место.

Проблемы с temp папкой. 

Для начала узнайте, где она располагается. Введите “echo %temp%” в консоли Windows. В ответ должен быть путь. Проверьте, что по такому пути папка существует. Важный момент - в пути не должно быть скрытых папок. К примеру, если у вас адрес “C:\Users\username\AppData\Local\Temp” - то проблема может быть с тем, что папка “AppData” является скрытой. 

Решения:  либо сделать папку видимой (правый щелчок мыши на папке → Properties → в пункте attributes снять галочку напротив hidden, возможно нужны будут права администратора). Если вы не видите саму  папку, сначала нужно включить отображение скрытых папок в системе (если не знаете как это сделать - внизу статьи будет ссылка на инструкцию).

либо поменять адрес для temp папки (правый щелчок мыши на “computer” , затем выберите в контекстном меню properties -> advanced system settings -> environment variables ->
"User variables for " в списке выберите  TEMP(и потом повторите с  TMP) и поменяйте значения к примеру на "c:\temp", только убедитесь, что такая папка у вас есть, либо создайте ее сами).

Если вы столкнулись с ошибкой Git "pre-receive hook declined", то есть несколько вариантов, почему она возникла.

Самая распространенная причина - в вашем репозитории (к примеру GitLab)  master   ветка теперь “защищена” (protected), а главная ветка - это main. 

Решения: 

  • В настройках проекта (Settings > Repository) зайдите в раздел защищенных веток "Protected branches",  найдите ветку "master"  и нажмите на сброс блокировки ("Unprotect"). 
  • Как альтернативное решение - настроить своему пользователю разрешение делать изменения в данной ветке. 

Чтобы запросить данные из таблицы за текущий день, можно использовать такой код запроса:

SELECT *
FROM table_name
WHERE DATE(date_field_name) = CURDATE()

где table_name = название таблицы, откуда хотите получить данные.

date_field_name - название поля, где хранятся даты (в формате date или datetime)

 

Альтернатива - при помощи PHP прописать сегодняшнюю дату в запрос (иногда имеет смысл при использовании индексирования на колонку дат):

$mysqlQuery = "SELECT *
FROM table_name
WHERE date_field_name > '" . date('Y-m-d') . " 00:00:00' ";

Чтобы перевести Daterangepicker на свой язык, достаточно при инициализации добавить переводы нужных фраз.

Исходные значения:

$("#your_input_id").daterangepicker(
{
locale: {
"daysOfWeek": [
"Su",
"Mo",
"Tu",
"We",
"Th",
"Fr",
"Sa"
],
"monthNames": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"applyLabel": "Apply",
"cancelLabel": "Cancel",
"fromLabel": "From",
"toLabel": "To",
"customRangeLabel": "Custom",
}
});

Перевод на русский:

...

Допустим, есть дата в произвольном формате “25.08.2022”. Мы ходим ее использовать далее при создании объекта new Date(). Проблема в том, что в таком формате мы не можем сразу передать дату в new Date(), потому что будет либо ошибка, либо дата будет не корректной. 

Сначала необходимо конвертировать дату в нужный формат. 

Один из примеров, как это можно сделать:

var splittedDate = "25.08.2022".split(".");  
var formattedDate = splittedDate[1] + "/" + splittedDate[0] + "/" + splittedDate[2];
var finDate = new Date(formattedDate);
console.log(finDate);

 

Задать нужный формат можно при инициализации скрипта:

$(function() {
$("#your_input_id").daterangepicker(
{
opens: 'left',
locale: {
format: 'DD.MM.Y' // формат выбранных дат, как они будут отображаться у пользователя. В данном примере дд.мм.гггг
}

},
function(start, end, label) { //обработка выбранных значений
});
});

html:

<input name="your_input_name" id="your_input_id" value="" />