2013-04-15 2 views
1

Задача: Для просмотра pdf-файла в google viewer и пользователь не может видеть исходный путь/URL-адрес pdf в источнике просмотра. Поэтому я решил передать Pdf URL в PHP с помощью сеансаURL-адрес Google Viewer

viewer.php

<?php 
session_start(); 
$_SESSION['url']= 'http://research.google.com/archive/bigtable-osdi06.pdf'; 
?> 
<iframe src="http://docs.google.com/viewer?url=http://sitename.com/pdf.php&embedded=true" width="600" height="780" style="border: none;"></iframe> 

pdf.php

<?php 
session_start(); 
header('Content-type: application/pdf'); 
readfile($_SESSION['url']); 
?> 

проверить в переменной сеанса pdf.php с помощью var_dump, он возвращает http://research.google.com/archive/bigtable-osdi06.pdf правильно, но не работает в google viewer.

Но когда я устанавливаю url непосредственно в readfile, он работает. например

readfile('http://research.google.com/archive/bigtable-osdi06.pdf'); 

или

$a = 'http://research.google.com/archive/bigtable-osdi06.pdf'; 
readfile($a); 

Пожалуйста, помогите мне, почему переменная сессии не работает в ReadFile

извините, за мой английский

+0

ли вы решить эту проблему? –

ответ

2

Предположим, что это неправильный контекст cookie (сессии). Когда вы устанавливаете $ _SESSION, ваш браузер является клиентом A. Затем вы открываете iframe и запрашиваете http://docs.google.com/viewer?, чтобы загрузить pdf.php Google в качестве клиента B (проверьте свой журнал http-сервера, есть два IP-адреса) и поместите результат в качестве приложения-просмотра в свой браузер, , но вы не установили файлы cookie для клиента B.
Что вы должны сделать:
Похоже, вам нужно установить идентификатор сеанса в URL-адресе iframes, используя rawurlencode().

viewer.php

<?php 
session_start(); 
$_SESSION['url']= 'http://research.google.com/archive/bigtable-osdi06.pdf'; 
?> 
<iframe src="http://docs.google.com/viewer?url=<?php 
    // set current session_id for feature Google GET request 
    echo rawurlencode("http://sitename.com/pdf.php?PHPSESSID=".session_id()); 
    ?>&embedded=true" width="600" height="780" style="border: none;"></iframe> 

pdf.php

<?php 
session_id($_GET['PHPSESSID']); // we use $_GET, not COOKIE 
session_start(); 
header('Content-type: application/pdf'); 
readfile($_SESSION['url']); 
+0

Спасибо ... но я проверю это скоро –

1

session_start() сама по себе является оболочкой для конкретной обработки файлов cookie для сеансового ключа. его можно определить session_set_save_handler(). Короче говоря, он также модифицирует заголовок.

Если вы используете session_start() в верхней части php-скрипта, который также имеет вызовы header() позже в скрипте для загрузки файлов, тогда вы должны добавить некоторую форму управления кешем, чтобы IE работал правильно. Я использую заголовок ('Cache-Control: public'); сразу же после кода в верхней части скрипта с вызовом session_start(), который проверяет, что у меня есть правильно зарегистрированный пользователь. Это позволяет вызовам header() и fpassthru() загружать файл позже в скрипте с использованием IE 5.5 SP2.

+0

Спасибо, но почему переменная session не работает –

+0

Вы должны сначала знать, что сама сессия также является ключом от cookie. Таким образом, путем изменения заголовка cookie с помощью session_start могут иметь разные типы поведения в браузерах. –

Смежные вопросы