Каталог временных файлов mpdf недоступен для записи при загрузке на сервер - PullRequest
0 голосов
/ 08 марта 2019

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

PHP Fatal error: Uncaught Mpdf\MpdfException: Temporary files directory "E:\Inetpub\vhosts\gsm.org.my\httpdocs\print/custom/temp/dir/path" is not writable in E:\Inetpub\vhosts\gsm.org.my\httpdocs\print\vendor\mpdf\mpdf\src\Cache.php:17
Stack trace:
#1 E:\Inetpub\vhosts\gsm.org.my\httpdocs\print\vendor\mpdf\mpdf\src\Mpdf.php(1054): Mpdf\ServiceFactory->getServices(Object(Mpdf\Mpdf), Object(Psr\Log\NullLogger), Array, 0, Object(Mpdf\Language\LanguageToFont), Object(Mpdf\Language\ScriptToLanguage), NULL, NULL, NULL, NULL)

#2 E:\Inetpub\vhosts\gsm.org.my\httpdocs\print\print-form.php(88): Mpdf\Mpdf->__construct(Array)

#3 {main} thrown in E:\Inetpub\vhosts\gsm.org.my\httpdocs\print\vendor\mpdf\mpdf\src\Cache.php on line 17

Это потому, что серверу не удалось найти путь к файлу или я неправильно его написал?

Я пытался дать разрешение на папку src, но он сказал, что не может изменить свойства файла src. Я новичок в этой области. Я попытался найти решение в Google относительно этой ошибки, но ничего не смог найти.

1 Ответ

0 голосов
/ 01 апреля 2019

Если вы хотите попробовать mPDF еще раз:

кажется, что вы не предоставляете правильную конфигурацию для mPDF, но мы не можем точно сказать, что это часть вашего кода (строка 88 вашего print-form.php) отсутствует.Взято из моего последнего кода с использованием mPDF:

try {
  $mpdf = new \Mpdf\Mpdf([
    'tempDir' => __DIR__ . '/../tmp', // uses the current directory's parent "tmp" subfolder
    'setAutoTopMargin' => 'stretch',
    'setAutoBottomMargin' => 'stretch'
  ]);
} catch (\Mpdf\MpdfException $e) {
    print "Creating an mPDF object failed with" . $e->getMessage();
}

Строка 17 в Cache.php является частью конструктора Cache и выдает ошибку в случае, если временный каталог не доступен для записи или не является каталогом:

// taken from method "createBasePath($basePath)"
if (!is_writable($basePath) || !is_dir($basePath)) {
    return false;
}

Чтобы проверить, видите ли вы ошибку из-за недостаточных прав доступа к файлу или несуществующего каталога, загрузите файл с этим содержимым на свой сервер и перейдите к нему с помощью предпочитаемого браузера:

<?php
$pathToCheck= "E:\\Inetpub\\vhosts\\gsm.org.my\\httpdocs\\print//custom//temp//dir//path";

print 'Folder exists: '.(is_dir($pathToCheck) ? 'yes' : 'no').'<br />';
print 'Folder is writable: '.(is_writable($pathToCheck) ? 'yes' : 'no').'<br />';

Вы находитесь на сервере Windows, поэтому вам нужно будет добавить нужного пользователя в папку «tmp» в «Свойства» -> «Безопасность», дополнительно проверьте, не помечен ли для атрибута «Только для чтения» атрибут.

Дополнительные советы:

Пожалуйста, опубликуйте соответствующий код в своем будущем вопросе (например, соответствующие части вашего print-form.php), так как это снижает риск угадывать, чтоможет быть причиной.

...