Принудительная загрузка через разные учетные записи cpanel - PullRequest
0 голосов
/ 30 декабря 2011

Хорошо, у нас есть сервер, на котором работает Cpanel, и мы настроили одну учетную запись / домен в качестве центрального хранилища для загружаемых носителей.Мы поместили каталог media над каталогом public_html (в основной каталог для этой учетной записи - содержащий public_html, www и т. Д. - называем этот каталог "USER").Назовите основной сайт «Сайт А».

Мы разместили каталог мультимедиа над public_html, потому что мы не хотим, чтобы пользователи обращались к мультимедиа напрямую.Мы хотим обслуживать их с помощью различных сценариев.

Также в центральном хранилище у нас есть набор сценариев, которые мы используем на наших сайтах.

Итак, у нас есть Сайт B и Сайт C.Это разные учетные записи cpanel, и у каждого есть свой собственный каталог USER, public_html и т. Д., Надеюсь, вы поняли идею.

Эти сайты без каких-либо проблем обращаются к сценариям, хранящимся в центральном каталоге.

Итак, теперь на сайте B у нас есть сценарий, который должен принудительно загружать медиа из центрального каталога на сайте.О. Сценарий может видеть, что файл существует (с file_exists и т. Д.).

Но часть принудительной загрузки не работает.Вот сценарий:

$ctype="application/force-download";
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".$title."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename)+32);

$handle = fopen($filename, "r");

while ( $contents = fread( $handle, 1024 ) )
{

    $filesize = $filesize - 1024;
    print ($contents);
    flush();

}

fclose($handle); 
exit();

Значение в $ filename: ../../siteA/central/repository/test.pdf (где central находится на том же уровне, что public_html).Доступ к нему осуществляется из общедоступного каталога на сайте B - так что ... в каталог USER на сайте B, .. в каталог, содержащий все каталоги учетных записей cpanel, затем на сайт A.

Это работает нормальнона моей локальной конфигурации WAMP.

Если честно, хотя у нас есть весь сервер и мы владеем всеми учетными записями cpanel на нем, я все еще был весьма удивлен, что владелец сайта B мог использовать относительный путь и получать доступ к сценариям и тому подобному в учетной записи.Сайт А. Кажется немного небезопасным, может, сервер настроен неправильно?

Так что в любом случае сценарий на сайте В может увидеть, что медиа-файл существует.Файл мультимедиа имеет полные разрешения на чтение.Сайт B уже может получать доступ и запускать сценарии в том же каталоге, что и медиа-файл.Однако при выполнении я получаю ошибку 500 ...

"Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос."

У кого-нибудь есть идеи?Если это вещь конфигурации, я могу заставить принимающую компанию делать вещи (не уверен, что именно).Но, возможно, это проблема пути или что-то в этом роде.Сегодня утром у меня была похожая проблема с изображениями, и мне пришлось поместить эти изображения в общедоступный каталог сайта А, чтобы сайт Б мог их отображать.Тем не менее, файлы мультимедиа не могут быть в общедоступном каталоге, и плюс - если я не ошибаюсь, потому что скрипт использует fread, print и т. Д., Это должно работать нормально?Ну, это работало локально, как я говорю.

Если бы кто-то мог указать мне правильное направление с этим, это было бы действительно здорово.

Большое спасибо.

...