Здравствуйте!
Использовал библиотеку PhpSpreadsheet в WordPress для формирования отчета с выгрузкой изображений в Excel. Библиотека при работе с изображениями в методе setPath() с помощью функции PHP file_exists() проверяет наличие картинки и загружает в Excel.
/**
* Set Path.
*
* @param string $pValue File path
* @param bool $pVerifyFile Verify file
*
* @throws PhpSpreadsheetException
*
* @return Drawing
*/
public function setPath($pValue, $pVerifyFile = true)
{
if ($pVerifyFile) {
if (file_exists($pValue)) {
$this->path = $pValue;
if ($this->width == 0 && $this->height == 0) {
// Get width/height
list($this->width, $this->height) = getimagesize($pValue);
}
} else {
throw new PhpSpreadsheetException("File $pValue not found!");
}
} else {
$this->path = $pValue;
}
return $this;
}
Для получения адреса картинки использовал get_the_post_thumbnail_url(). Возвращает URL изображения записи.
$thumbnail_url = get_the_post_thumbnail_url($post_id); // "https://site.com/wp-content/uploads/2021/02/image.jpg"
Но функция file_exists() работает с путем в ОС сервера, а не URL. Поэтому для преобразования пути использовал следующий код:
$thumbnail_url = str_replace($_SERVER['HTTP_ORIGIN'], $_SERVER['DOCUMENT_ROOT'], $thumbnail_url);
Заработало, но есть ощущение, что должно быть тривиальное решение для такого преобразования. Как бы вы получили серверный путь к файлу?