|
PHP - как вывести картинку из закрытой директории | ☑ | ||
---|---|---|---|---|
0
vde69
02.01.20
✎
11:31
|
PHP - как вывести картинку из закрытой директории.
в смысле - она доступна для скрипта PHP, но не доступна для клиента по этому не работает вариант. То есть домашний каталог сайта это параллельная ветка с шарой на которой лежат картинки echo "<img src='/i-data/d2761c3e/photo/DSC00152.JPG' />"; вариант который везде предлагают (c base64, и на который я убил 2 дня) не работает из-за ограничений размера данных (почему-то ни одна сволочь не пишет, про это, пока сам нашел чуть не позеленел), то есть в страничке данные в base64 есть и они нормальные а вот на экран не выводятся... $file = '/i-data/d2761c3e/photo/DSC00152.JPG'; $path = pathinfo($file); $ext = mb_strtolower($path['extension']); if (in_array($ext, array('jpeg', 'jpg', 'gif', 'png', 'webp', 'svg'))) { if ($ext == 'svg') { $img = 'data:image/svg+xml;base64,' . base64_encode(file_get_contents($file)); } else { $size = getimagesize($file); $datimg_1 = file_get_contents($file); $datimg_2 = base64_encode($datimg_1); $img = 'data:' . $size['mime'] . ';base64,' . $datimg_2; } } echo "<style> .logo { background: url(".$img.") } </style>"; echo "<div class='logo'></div>"; есть еще мысля сделать симлинк, но пока это только мысли и наверно последняя надежда, которая то-же может лопнуть. |
|||
1
Garykom
гуру
02.01.20
✎
11:36
|
||||
2
Garykom
гуру
02.01.20
✎
11:37
|
(1)+ перед этим
header('Content-type: image/jpg'); в своем скрипте отдельном php который картинки будет "проксировать" из каталога |
|||
3
Garykom
гуру
02.01.20
✎
11:39
|
<?PHP
$file = '/i-data/d2761c3e/photo/DSC00152.JPG'; header('Content-type: image/jpg'); echo file_get_contents($file); ?> Как будешь имя картинки запрашиваемое в скрипт передавать уже сам думай |
|||
4
vde69
02.01.20
✎
11:42
|
(3) эти варианты не работают !!! точнее работают на маленьких файлах и не работают на больших. Подобных вариантов я перепробовал штук 8....
я-же в (0) написал, что передача по base64 имеет ограничение по размеру строки... |
|||
5
vde69
02.01.20
✎
11:44
|
(3) кроме всего прочего в динамическом сайте вставлять заголовок можно только самой первой операцией, а у меня до вывода картинки килограмм кода....
|
|||
6
vde69
02.01.20
✎
11:45
|
(5) а без заголовка код из (3) будет выводить только кракозябры
|
|||
7
Garykom
гуру
02.01.20
✎
11:46
|
(4) А пробовал именно вот этот простой вариант?
Возможны проблемы если у тебя iis или кривые настройки веб-сервера, но тут никак не обойти путем php |
|||
8
Garykom
гуру
02.01.20
✎
11:47
|
(5) Ты не понял! Отдельный php скрипта который выдает только одну картинку!
А в своем основном вставляешь адрес этого срипта вместо адреса картинки echo "<img src='getimg.php' />"; |
|||
9
Garykom
гуру
02.01.20
✎
11:49
|
(8)
echo "<img src='getimg.php?filename=DSC00152.JPG' />"; |
|||
10
vde69
02.01.20
✎
11:54
|
(8) пробовал, правда я не уверен, что у меня корректно подцепился этот отдельный скрипт, там его устанавливать надо... но суть не в этом, дело в том, что PHP выдает текстовую страничку и любая попытка вставить туда данные приводит или к конвертации их в бейс64 (для этого и нужен конткст что-бы правильно конвертнуло) или использованию переменных заголовка для динамического получения данных, у меня оба варианта не работают...
|
|||
11
Asmody
02.01.20
✎
11:55
|
(0) вообще-то, такие вопросы решаются настройкой веб-сервера.
Прилепи виртуальный каталог и все. |
|||
12
vde69
02.01.20
✎
11:55
|
(10) +
мой вариант из (0) не требует указания контекста при конвертации, так как ее делает сам и явно |
|||
13
Garykom
гуру
02.01.20
✎
12:01
|
все же попробуй так
getimg.php: <?php $_GET["filename"] $file = '/i-data/d2761c3e/photo/' . _GET["filename"]; header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize($file)); echo file_get_contents($file); ?> твой php: echo "<img src='getimg.php?filename=DSC00152.JPG' />"; |
|||
14
Garykom
гуру
02.01.20
✎
12:01
|
(13) тьфу не удалил
getimg.php: <?php $file = '/i-data/d2761c3e/photo/' . _GET["filename"]; header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize($file)); echo file_get_contents($file); ?> |
|||
15
vde69
02.01.20
✎
12:02
|
(11)
типа в httpd.conf: Alias /i_photo/ "/i-data/d2761c3e/photo/" <Directory "/i-data/d2761c3e/photo/"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> и дальше echo "<img src='/i_photo/DSC00152.JPG' />" |
|||
16
Garykom
гуру
02.01.20
✎
12:03
|
(14) забыл $
getimg.php: <?php $file = '/i-data/d2761c3e/photo/' . $_GET["filename"]; header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize($file)); echo file_get_contents($file); ?> |
|||
17
Garykom
гуру
02.01.20
✎
12:05
|
Алиасы хорошая штука но не всегда их можно прилепить, например если каталоги берутся из настроек из базы или из файлов куда пишутся админкой или чем то внешним.
|
|||
18
vde69
02.01.20
✎
12:10
|
с (15) у меня то-же проблеммы, после перезагрузки файл httpd.conf востанавливается, то есть надо заморачиватся или с кроном или еще как... короче не понятно
|
|||
19
Asmody
02.01.20
✎
12:16
|
(18) чудо-хостинг? Там какая-нибудь панель управления стоит?
|
|||
20
Garykom
гуру
02.01.20
✎
12:20
|
Лично я от апача стараюсь отказаться, уже давно nginx умеет php
|
|||
21
vde69
02.01.20
✎
12:29
|
(19) это NAS, и сильно его крутить совсем не охота,
в нем стоит wordpress 4.4 и твинки, мне надо подружить каталоги твинки с мини порталом который на вордпрессе |
|||
22
Garykom
гуру
02.01.20
✎
12:34
|
(21) Ё мое, точно nas же крутил.
Короче в очередной раз убеждаюсь что лучше открытую железку иметь типа малинки или апельсинки. |
|||
23
Garykom
гуру
02.01.20
✎
12:36
|
(18) Кста а свой скрипт то при запуске можно? Так сделай чтобы правил или заменял httpd.conf после ребута.
|
|||
24
vde69
02.01.20
✎
12:40
|
ура !!! получилось :)
$scirpt_path = plugins_url('/pict.php', __FILE__); echo "<img src='".$scirpt_path."?filename=DSC00152.JPG' />"; короче полный путь до скрипта нужен, с указанием сервера |
|||
25
Garykom
гуру
02.01.20
✎
12:45
|
Это когда 1С на этом NAS запускать будешь скажи ))
|
|||
26
vde69
02.01.20
✎
12:48
|
(22) а я наоборот убежден в обратном, готовое устройство оно сбалансировано, я-бы апельсинку уже убил раз десять....
тут главное понимать, что все хотелки надо решать тем что есть а не тем, что хочется... я думаю, что для тебя это не должно быть проблемой, судя по всему ты видел DOS :) |
|||
27
vde69
02.01.20
✎
12:49
|
(25) никогда не буду, я четко понимаю, что NAS != Server
|
|||
28
Garykom
гуру
02.01.20
✎
12:52
|
(26) (27) Вот а на апельсинке или малинке можно 1С запускать, жаль только что пока только мобильную под андроид, для линукс под arm нет сборок 1С еще.
|
|||
29
Asmody
02.01.20
✎
13:13
|
(27) Да ладно! Относительно последние синьки даже докера пускать умеют.
|
|||
30
dmitryds
02.01.20
✎
16:41
|
||||
31
dmitryds
02.01.20
✎
16:42
|
(31) + вся соль в блочном чтении и отдаче
if ($fd = fopen($file, 'rb')) { while (!feof($fd)) { print fread($fd, 1024); } fclose($fd); } |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |