Почему-PHP функция filesize на сервере на котором сайт возвращает размер файла только если указать полный абсолютный путь к файлу а на моём компе работает и без полного абсолютного файла.
код то покажи - как relative path указываешь, как absolute
$filename = 'fuck.pdf';
$file = dirname(FILE).'/'.$filename;
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
@readfile($file);
poopoo, сдаюсь, я без идей. Возможно надо смотреть в сторону того, как именно подключается PHP к энджиниксу, но я тут ничего посоветовать не могу.
Ну на моём компе: /srv/www/htdocs/m2/protected/modules/user/controllers/fuck.pdf а на сервере почти то же самое — /var/www/htdocs/m2/protected/modules/user/controllers/fuck.pdf
права на сервере, я так думаю ты проверял?
Да.
ну тогда давай сравнивать какие заголовки отдает локалка и сервер при обращении к fuck.pdf
а вообще можно плюнуть и изменить строку - header('Content-Length: ' . filesize($file)); на header('Content-Length: ' . filesize($filename)); если уж ты уверен что оно не будет у тебя лежать где-то еще.
Так в этом то и загвоздка. У меня так работает, а на сервере отправляется файл с размером 0 байт.
покажи заголовки при скачивании этого файла - сервер что отдает?
Accept-Ranges: bytes
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: keep-alive
Content-Disposition: inline; filename="fuck.pdf"
Content-Length: 479832
Content-Transfer-Encoding: binary
Content-Type: application/pdf
Date: Mon, 30 Mar 2015 09:02:01 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Server: nginx
Set-Cookie: first_visit=0
X-Powered-By: PHP/5.4.4-14+deb7u7
Это с сервера.
На локальной машине то же самое, но версия PHP 5.6.1
var_dump($_SERVER);
И, да, считать пути к файлам - относительными это максимум пидорство. Считай от $ SERVER['DOCUMENT ROOT']
NokitaKaze, относительный путь всегда указывает не в то место, в которое ты хочешь. Всегда считай пути абсолютными.
Это касается и html-верстки тоже. Вот в css можно использовать относительные пути
DOCUMENT_ROOT указывает на /var/www/htdocs. Удобнее писать dirname(FILE).
poopoo, не представляю как меняется FILE в разных имплементациях во время include/require, а здесь всё точно
Content-Length: 479832 - это все же не ноль. размер то взялся?
"Хорошая" новость.
Потому что я использую полный абсолютный путь.
ну дык ты без полного покежь как выводит?
И это, а $file ты тоже показывал когда у тебя полный путь был?
poopoo, у тебя на компе ведь тоже linux?
Да.
по пути же видно
ob_start();
phpinfo();
file_put_contents('/tmp/phpinfo.html', ob_get_contents());
ob_end_clean();
делай на сервере и читай /tmp/phpinfo.html
Дело по любому где-то в настройках.
Accept-Ranges: bytes
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: keep-alive
Content-Disposition: inline; filename="fuck.pdf"
Content-Transfer-Encoding: binary
Content-Type: application/pdf
Date: Mon, 30 Mar 2015 09:23:01 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Server: nginx
Set-Cookie: first_visit=0
Transfer-Encoding: chunked
X-Powered-By: PHP/5.4.4-14+deb7u7
Да.
покажи что в $file если relative указан
на сервере я имею в виду
$filename = 'fuck.pdf';
$file = $filename;
сделай
$_SERVER['DOCUMENT_ROOT'].'/blahblah/fuck.pdf'
и проверяй что будет
мда... туплю)
А что будет? Будет работать.
poopoo, если будет работать, то вопрос закрыт. Отныне и во веки вечные пиши пути, относительно рута
Но почему здесь работает а там нет? Настройки, как уже предлагали, не смотрел так как сейчас не до этого.