php связываются с файлом изображения вне веб-каталога по умолчанию

Ваша попытка близка к правильной.

Код, приведенный ниже, представляет собой подход «старой школы» (т. Е. Без потоков):

// don't have setters in this object.
public class MyObject
{
  private final int id;
  private final String name;
  private int quantity;

  public MyObject(final int theId, final String theName)
  {
    id = theId;
    name = theName;

    quantity = 1;
  }

  public void incrementQuantity()
  {
    quantity += 1;
  }

  public int getId() { ... }
  public String getName() { ... }
  public int getQuantity() { ... }

  public boolean equals(final Object other)
  {
    // normal equals with 1 small caveat: only compare id and name to determine equals.
  }
}

public List<MyObject> blam(final List<MyObject> refundList)
{
  final List<MyObject> returnValue = new LinkedList<>();
  final Map<MyObject, MyObject> thingMap = new HashMap<>();

  for (final MyObject currentRefund : refundList)
  {
    final MyObject thing = thingMap.get(currentRefund);

    if (thing != null)
    {
      thing.incrementQuantity();
    }
    else
    {
      thingMap.put(currentRefund, currentRefund);
    }
  }

  returnValue.addAll(thingMap.values());

  returnReturnValue;
}

Редактировать: исправлено put

15
задан gnur 11 April 2011 в 09:49
поделиться

6 ответов

Вы не можете служить странице, которая это за пределами веб-каталога, потому что путь не работает, т.е. http://mydomain.com/../page.html просто относится к недоступному местоположению.

Если Вы действительно хотите служить (статическим) файлам, которые являются вне webroot, Вы могли записать маленький Сценарий PHP, чтобы считать их и произвести их. Таким образом Вы перенаправили бы запросы к Сценарию PHP, и PHP считает соответствующий файл из диска и возвратит его назад.

9
ответ дан 30 November 2019 в 23:59
поделиться

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

cd public_html
ln -s ../images

Потребности Apache Options +FollowSymlinks конфигурационная директива для этого для работы (можно поместить его в .htaccess в Вашем веб-корне).

Запись Сценария PHP, который служит файлам от внешнего веб-корня, побеждает цель веб-корня. Необходимо было бы проверить пути очень тщательно, чтобы не выставлять весь диск сети.

5
ответ дан 30 November 2019 в 23:59
поделиться

Если Вы используете Apache в качестве сервера, можно установить его для искажения каталога в httpd.conf...

<IfModule mod_alias.c>

    Alias /images/ "/User/Public_html/Image/"

    <Directory "/User/Public_html/Image">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>

IIRC, искаженная папка не должна быть в webroot.

16
ответ дан 30 November 2019 в 23:59
поделиться

Невозможно связаться непосредственно с файлом за пределами доступной для сети области веб-сервера.

Однако можно записать Сценарий PHP, который проксирует изображения для Вас

<img src="my_php_proxy.php">

потому что PHP может отправить данные изображения, а также HTML. Этот PHP "изображение" не ограничивается той же папкой как веб-доступный материал, это может получить доступ к любому читаемому файлу на сервере. См. http://www.electrictoolbox.com/image-headers-php/ для большего количества информации

1
ответ дан 30 November 2019 в 23:59
поделиться

Не возможно непосредственно получить доступ к файлам за пределами webroot; это - встроенное ограничение безопасности, которое является там на серьезном основании.

Однако возможно использовать Сценарий PHP для обслуживания этих изображений для Вас. Таким образом, можно назвать изображение как:

/image.php?file=myfile.jpg

и используйте file_get_contents (), чтобы получить содержание файла и распечатать их к Вашему браузеру. Необходимо также отправить заголовки клиенту в этом случае с помощью заголовка PHP () функция. Короткий пример:

<?php

    $file = basename(urldecode($_GET['file']));
    $fileDir = '/path/to/files/';

    if (file_exists($fileDir . $file))
    {
        // Note: You should probably do some more checks 
        // on the filetype, size, etc.
        $contents = file_get_contents($fileDir . $file);

        // Note: You should probably implement some kind 
        // of check on filetype
        header('Content-type: image/jpeg');

        echo $contents;
    }

?>

Используя сценарий к этому имеет еще некоторые преимущества:

  • Можно отследить загрузки и реализовать счетчик, например
  • Можно ограничить файлы аутентифицируемыми пользователями
  • ... и т.д.
32
ответ дан 30 November 2019 в 23:59
поделиться

Можно или сделать ссылку на каталог образов в общественности ___ HTML, переместить каталог образов в public_html или, если у Вас есть особая симпатия к замысловатым решениям, можно записать сценарий, который читает файл изображения и производит его пользователю (Конечно, если Вы не делаете белый список всех изображений, у Вас могла бы быть возможная проблема защиты в Ваших руках).

0
ответ дан 30 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: