Допустим, есть дата в произвольном формате “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="" />

Быстро извлечь определенный файл из zip архива с помощью PHP можно с помощью обычной функции copy:

copy("zip://" . $zipFilePath. "#" . $zippedFileName, $unzipFilePath);

где 

  • $zipFilePath - путь до архива,
  • $zippedFileName - название файла в архиве
  • $unzipFilePath - куда разархивировать

пример: 

copy("zip://myfile.zip#textfile.doc", "myDocument.doc");

Подробнее можно почитать тут

 

Пример функции, которая извлекает файлы из архива, при этом переименовывая их, если в папке назначения уже есть файлы с таким именем. 

function extractZip($zipFilePath, $folderToExtract) 
{
$zipArchive = new ZipArchive();
$result = $zipArchive->open($zipFilePath);
if ($result === TRUE) {
for ($i = 0; $i < $zipArchive->numFiles; $i++) {
$filename = $zipArchive->getNameIndex($i);
$filePath = $folderToExtract. '/' . $filename;
if (file_exists($filePath)) {
$fileInfo = pathinfo($filename);
$newFileName = $fileInfo['filename'] . '_(copy).' . $fileInfo['extension'];
copy("zip://" . $zipFilePath . "#" . $filename, $folderToExtract . '/' . $newFileName);
} else {
copy("zip://" . $zipFilePath. "#" . $filename, $filePath);
}
}
$zipArchive->close();
}
}

Параметры функции: 

$zipFilePath - путь до zip файла

$folderToExtract - путь до папки, куда нужно распаковать архив. 

 

Стоит учитывать, что функция не проверена на вложенных архивах и на вложенных папках. 

Функция, позволяющая извлечь файлы из zip архива в указанную папку:


function extractZip($filePath, $extractTo){
$zip = new ZipArchive();
$result = $zip->open($filePath);
if ($result === TRUE) {
$zip->extractTo($extractTo);
$zip->close();
}
return $result;
}

$file = 'myfile.zip'; // поменять на путь до вашего файла
$folder = 'myfolder'; // поменять на путь до папки, куда нужно извлечь файлы

extractZip($file, $folder);

Примечание: нужна библиотека zlib

 

Чтобы удалить директорию с помощью PHP, сначала необходимо удалить внутри нее все имеющиеся файлы. 

Для этих целей можно использовать данную функцию:

public function removeDirectory($dir): bool
{
$files = array_diff(scandir($dir), array('.', '..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? $this->removeDirectory("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}

Если вы столкнулись с ошибкой "Refused to execute script, strict MIME type checking is enabled", то как правило дело в том, что у вас не правильный URL. 

В первую очередь перепроверьте путь, пот которому пытаетесь подключить скрипт. Возможно у вас задан относительный путь или что-то еще. Попробуйте напрямую из консоли открыть скрипт - и если он открывается - тогда возможно стоит искать ошибку где-то еще, но в большинстве случаев ошибка как раз в не правильном URL. 

Чтобы поменять размер popup с помощью JavaScript, достаточно 1 строки кода:

window.resizeTo(width,height);

где width - новая ширина окна, height - новая высота окна

Пример, где окно становится размером 800*600:

window.resizeTo(800,600);

Рассмотрим пример, как можно получить размеры картинки, зная ее URL. 

Идея такая - создаем объект Image, которому присваиваем ссылку и потом после загрузки узнаем ширину и высоту. 

Пример:

const img = new Image();
img.src = 'http://mysite.com/myimage.gif'; // url замените на свой
img.onload = function() {
console.log(this.width);
console.log(this.height);
}

Данный пример должен вывести в консоль ширину и высоту картинки, которую вы укажите в URL. 

Рассмотрим на примере. Данный код кликнет на текст, содержащий слово "тест". Единственное уточнение - элемент должен быть кликабельный. 

$client = Client::createChromeClient();
$client->request('GET', 'https://testsite.ru/'); //заходим на сайт
$client->findElement(WebDriverBy::xpath("//*[contains(text(),'тест')]"))->click();
$client->close();

Чтобы сделать скриншот страницы в Symfony Panther, достаточно всего нескольких строк кода.

$client = Client::createChromeClient();
$client->request('GET', 'https://podelitsa.ru/'); //заходим на сайт
$client->takeScreenshot('screen1.png'); //делаем скриншот
$client->close();

Допустим, есть список и  с помощью filterXPath необходимо выбрать определенный пункт из этого списка для последующего на нем клика.

Рассмотрим как это сделать.

Список: 

<select id="mylist">
<option value="1">111</option>
<option value="2">222</option>
<option value="3">333</option>
</select>

Код для получения нужного элемента (в данном примере выбирается элемени списка где option value="2"): 

$input = $crawler->filterXPath(".//select[@id='mylist']//option[@value='2']"); // выбираем список на странице по id, а затем нужный option по значению value
$input ->click();

Пример, как можно получить HTML код загруженной страницы при использовании PantherCrawler:

$client = Client::createChromeClient();
$client->request('GET', $url);
print_r($client->getCrawler()->html()); // html код загруженной страницы

При выполнении запроса INSERT, взятого из какой-либо другой базы, вполне реально столкнуться с ошибкой “Дублирующаяся запись 'ххх' по ключу 'PRIMARY' при INSERT”. Это значит, что запись с таким первичным ключом уже есть в вашей базе, поэтому вставить в таблицу такую запись нельзя. Можно конечно удалить вручную такой запрос, чтобы скрипт продолжил свое выполнение без него, но что делать, если запросов тысячи? Перебирать все вручную, удаляя дубликаты - не лучшая идея. 

Есть несколько решений данной проблемы. 

  1. INSERT  автоматически заменить у всех запросов  на INSERT IGNORE. В таком случае такие дубликаты будут просто игнорироваться. 
  2. В конце запроса добавить приписку ON DUPLICATE KEY UPDATE. Если будет найден дубликат - то существующая запись будет обновлена новой информацией.