Помогите, пожалуйста, не пойму, в чем дело.
Запрашиваю файл - пишет, что файл не найден.
Права на файл - 777
Права на папку, где лежит файл - 755
Путь строится верный, распечатывала, проверяла.
Ни на локалхосте, ни на сервере не работает.
В чем еще может быть дело?
function library_form_submit($form, &$form_state) {
ob_start();
$filename = file_create_url('diff.txt');
if (!file_exists($filename)) drupal_set_message('Файл ' . $filename . ' не найден');
drupal_set_header("Content-Type: text/plain");
drupal_set_header("Content-Length: " . filesize($filename));
drupal_set_header("Content-Disposition: attachment; filename=" . $filename);
$fp = fopen($filename, 'r');
flock($fp, LOCK_EX);
$read = fread($fp, filesize($filename));
echo $read;
$ob = ob_get_contents();
flock($fp, LOCK_UN);
fclose($fp);
ob_end_clean();
return print $ob;
}
ob_start();
$filename = file_create_url('diff.txt');
if (!file_exists($filename)) drupal_set_message('Файл ' . $filename . ' не найден');
drupal_set_header("Content-Type: text/plain");
drupal_set_header("Content-Length: " . filesize($filename));
drupal_set_header("Content-Disposition: attachment; filename=" . $filename);
$fp = fopen($filename, 'r');
flock($fp, LOCK_EX);
$read = fread($fp, filesize($filename));
echo $read;
$ob = ob_get_contents();
flock($fp, LOCK_UN);
fclose($fp);
ob_end_clean();
return print $ob;
}
Комментарии
submit и validate формы не выдают контент.
Они предназначены только для логики - проверить, записать в БД и т.п.
Перенесите этот код в какой-нить обычный MENU_CALLBACK.
А какой смысл лочить файл, если Вы открываете его на чтение? В этом есть сакральный смысл?
Использование буферизации тоже не совсем понятно...
И функция print всегда возвращает 1-ку.
Перенесла в колбэк,и снова - файл не найден!
«А какой смысл лочить файл, если Вы открываете его на чтение? В этом есть сакральный смысл?»
Пока кто-то скачивает файл - для остальных он блокируется.
«Использование буферизации тоже не совсем понятно...»
Буферизация нужна для того, чтобы послать заголовки. Потому что до заголовков уже был вывод в броузер.
«И функция print всегда возвращает 1-ку.»
А как здесь без print?