Эта ошибка происходит потому что файл конфигурации phopunit.xml содержит устаревшую структуру. 

Для устранения ошибки достаточно выполнить такую команду: 

vendor/bin/phpunit --migrate-configuration

Ситуация - в файле phpunit.xml прописаны env переменные, которые должны подменить заданные в файле .env, но при тестировании это не срабатывает.

Пример: 

<php>
<env name="mytest" value="testvalue" />
</php>

Это происходит потому что по умолчанию PHPUnit не перезаписывает значения env переменных, если они уже заданы. Чтобы значения env перезаписывались, необходимо добавить параметр force="true":

<php>
<env name="mytest" value="testvalue" force="true" />
</php>

Пример файла:    

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bootstrap="vendor/autoload.php"
backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<coverage>
<include>
<directory suffix=".php">src/</directory>
</include>
</coverage>
<testsuites>
<testsuite name="Project Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
<php>
<env name="TEST_ENV_VARIABLE" value="test" />
</php>
</phpunit>


Возможно кому-то пригодится, английская инструкция по применению к популярному египетскому лекарству от простуды 123 (таблетки). 

К сожалению, на русском инструкции нет, но на английском тоже можно расшифровать. 

Допустим, у вас есть полный путь до файла C:\testfolder1\testfolder2\mytest.txt  и вы хотите получить отдельно название файла mytest.txt и отдельно путь  C:\testfolder1\testfolder2\

Приведем пример, как это можно легко сделать с помощью PHP:

$path = 'C:\testfolder1\testfolder2\mytest.txt';
$fileName = basename($path);
$pathName = dirname($path);
var_dump($fileName); // выведет "mytest.txt"
var_dump($pathName); // выведет "C:\testfolder1\testfolder2"

Самый простой способ добиться ошибки "Connection timed out" - это пробовать подсоединиться к любому из не маршрутизируемых IP-адресов.  Как только ошибка воспроизведена, можно тестировать ее обработку.

Пример такого адреса: 

10.0.0.0

Бывают ситуации, когда таблица генерируется с дополнительных html внутри тегов td, к примеру: 

<td><span style="color: #ff0000;">20</span></td>

В таком случае лишний HTML может влиять на сортировку по колонке и она может работать не корректно (аналогичная ситуация и с фильтрами).

Самый простой способ - это прописать в HTML дополнительный параметр, по которому dataTable будет вести сортировку - data-order

Для сортировки для примера, указанного выше, это будет выглядеть так: 

<td data-order="20"><span style="color: #ff0000;">20</span></td>

В данной ситуации DataTable автоматически будет знать, что сортировать надо только по цифре 20, а не по всему указанному HTML коду. 

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

Если необходимо в тег  img  вывести картинку, созданную / открытую с помощью библиотеки Imagick, то вам поможет данный код: 

$image = new Imagick();
$image->readImage("test.jpg");

//сам вывод в тег:
echo '<img src="data:image/jpg;base64,'.base64_encode($image->getImageBlob()).'" alt="тест картинки" />';

 

Если вы столкнулись с ошибкой “This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL Server”, но при этом у вас установлен и активен  pdo_sqlsrv, дело вот в чем:

необходимо установить  драйвер ODBC 11.

Скачать драйвер можно по этой ссылке

Такая ошибка возникает когда в строке запроса пытаетесь прописать такое (встречается кое-где в документации):

Trust Server Certificate=true

На самом деле решение простое, нужно просто убрать пробелы и все заработает. 

Правильный вариант: 

TrustServerCertificate=true

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

Решение: когда создаете attachment к письму, надо прописать кодировку и различные другие параметры.

Пример рабочего варианта: 

$filename = 'название файла.docx';
$mime->addAttachment($attachmentContent, $contentType, $filename, false, 'base64', 'attachment', '', '', '', 'base64','utf-8', '', 'utf-8');

Про все параметры данной функции можно подробно прочитать тут

Что делать, если вы столкнулись с ошибкой “Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_sqlsrv_74_ts_x64.dll' - The specified procedure could not be found.” при старте PHP?

В первую очередь проверьте, что библиотека находится по тому адресу, по которому ее компьютер пытается ее загрузить. 

Если с адресом все в порядке (как было у меня), то тут нужно внимательно проверить соответствие версий. К примеру php_pdo_sqlsrv_74_ts_x64.dll  подразумевает что у вас установлен php 7.4 и ваша машина имеет архитектуру х64. В моем случае был установлен PHP 7.3 - поэтому не работало.  К примеру, для PHP 8 нужно загружать другую версию библиотеки - php_pdo_sqlsrv_80_ts_x64.dll

Это решение может помочь тем, кто использует Cloudflare. 

Если вы заметили, что Request::ip возвращает не ваш ip, а совсем другой - этому есть объяснение. 

Дело в том, что Cloudflare заменяет реальные ip адреса посетителей своими ip адресами, так как трафик проходит сквозь Cloudflare.

Решение

Тем не менее Cloudflare предоставляет информацию об оригинальном ip клиента. Это можно взять из дополнительных записей массива $_SERVER:

$_SERVER["HTTP_CF_CONNECTING_IP"]

Дополнительно можно узнать страну посетителя: 

$_SERVER["HTTP_CF_IPCOUNTRY"]

(для России выведет “RU”. 

Если вы столкнулись с ошибкой “IndentationError: expected an indented block” в Python, то первое, что необходимо сделать, это проверить корректность отступов. 

Так как отступы играют важную роль при программировании на Python, то их не правильное расположение может привести к ошибкам. 

К примеру возьмем вложенный цикл. 

Такой код вызовет данную ошибку: 

for x in range(100):
for y in range(200):
print(x, y)

Ошибка возникнет потому что  print(x, y) стоит на одном уровне с конструкцией for. 

Чтобы ее исправить, достаточно всего лишь отступа: 

for x in range(100):
for y in range(200):
print(x, y)

Что делать, если столкнулись с ошибкой “TypeError: 'int' object is not subscriptable”  в Python? 

Скорее всего вы пытаетесь обратиться к переменной по индексу, подразумевая что это массив, а на самом деле в переменной записано целое число. Первым делом проверьте содержимое переменной, на которую указывает ошибка (посмотрите, на какую строку кода указывает отладчик). 

Допустим, есть картинка, и вам необходимо узнать, какое RGB значение у определенного пикселя.

Пример кода: 

from PIL import Image

img=Image.open('test.jpg')
pixelData = img.load()
print(pixelData[0,0])

print(pixelData[0,0])  выведет на экран значение первого пикселя с адресом [0, 0]  у картинки test.jpg. К примеру,  (129,177,200)

Перевести изображение в черно-белый вариант в Python достаточно просто с помощью Pillow

Пример кода: 

from PIL import Image

img=Image.open('test.jpg')
greyscaleImg = img.convert('L')
greyscaleImg.show()

где 'test.jpg' - путь до вашей картинки. 

Список возможных встроенных фильтров: 

BLUR

  • CONTOUR
  • DETAIL
  • EDGE_ENHANCE
  • EDGE_ENHANCE_MORE
  • EMBOSS
  • FIND_EDGES
  • SHARPEN
  • SMOOTH
  • SMOOTH_MORE

Пример кода, как их применять: 

img=Image.open('testimage.jpg')
new_img = img.filter(ImageFilter.SHARPEN)
new_img.show()

Не забудьте вначале импортировать библиотеки: 

from PIL import Image, ImageFilter

Тут img.filter(ImageFilter.SHARPEN) в коде вместо SHARPEN можно применить любой фильтр из списка выше. 

Документация

Чтобы в Python добавить многострочный комментарий достаточно использовать ''' в начале и в конце закомментированного кода.

Пример: 

'''
комментарий
на несколько
строк
'''

Так как в отличии от многих других языков программирования в Питоне и начало и конец закомментированного блока выглядят одинаково, то очень удобно просто переносить  '''  выше/ниже, если надо откомментировать и закомментировать одновременно рядом стоящие строки.