Проблема с загрузкой PHP - PullRequest
2 голосов
/ 30 мая 2009

Я работал с несколькими сценариями, чтобы начать загрузку файлов на мою машину для разработки. Проблема в том, что, несмотря на ожидаемую простоту этой операции, Apache, кажется, истекает время ожидания, когда я пытаюсь загрузить изображение. Для загрузки установлено значение On, а для каталога tmp - php.ini.

Я попытался загрузить основное gif из Google, изображение 8.36KB. Это должно быть хорошо и в пределах возможностей загрузки PHP.

Вот копия сценария. Там должно быть легко исправить. В соответствии с просьбой я изменил тильду на актуальный каталог.

<?php 

if (!isset($_GET['upload'])) { ?>
  <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
  <input type="file" name="file" class="form">
  <input name="submit" type="submit">
  </form>
<? } else  if (isset($_GET['upload']) && $_GET['upload'] == 'true') {
  $url = $_FILES['file']['name'];
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg");
    if ($move) {
        echo "Success!";
    } else { 
        echo "Err..."
    } 
} ?>

Спасибо, Dan

EDIT:

Я исправил это с помощью нескольких ответов, один из которых я отмечу.

Несколько вещей были причиной такого поведения.

  1. Не заданы разрешения для каталога images, чтобы пользователь _www мог получить к нему доступ. chmod -R 777 images, казалось, исправил это, так же как sudo chown _www images.

  2. Вывод формы мог повредить сам скрипт PHP. Как и предполагалось, ECHO <<< ...END помогло, я думаю.

Ответы [ 4 ]

3 голосов
/ 30 мая 2009

Что заставляет вас верить, что Apache истекает, а не, скажем, прямо проваливается каким-то образом? Потому что меня бросает в глаза то, что вы пытаетесь переместить файл в ~/file.jpg, что, я уверен, не сработает; ~ - это конструкция, которая обычно имеет смысл только внутри оболочек, если только одна из странных неясных функций PHP не обрабатывает ее в подобных контекстах. В любом случае, попробуйте поставить актуальный каталог.

2 голосов
/ 30 мая 2009

Скорее всего, это проблема размера файла и / или проблемы с правами доступа между пользователем Apache и указанным каталогом. Например, убедитесь, что экземпляр Apache не запущен под пользователем (никто).

Комментарий к хаосу: Он прав, тильда (~) может вызвать проблемы, но, вероятно, не вызовет тайм-аут; это будет отображать предупреждение. Даже если он работает в вашей системе, он, вероятно, поместит файл в непредвиденный каталог или столкнется с некоторыми проблемами, если у пользователя Apache (например, www) нет действительного домашнего каталога.

2 голосов
/ 30 мая 2009

PHP по умолчанию имеет 30-секундный тайм-аут на странице. Так что, если ваша загрузка займет более 30 секунд, это не удастся. Установите таймаут либо в вашем php.ini, либо поместите следующий код вверху файла.

ini_set(max_execution_time, 90);

Второй аргумент представляет время в секундах до истечения времени ожидания страницы. Установите его в любое время, которое вы считаете подходящим. Кроме того, хаос корректен в том смысле, что «~» - это конструкция, которая обычно имеет значение только внутри оболочек.

Re: http://ca2.php.net/manual/en/ini.list.php

EDIT: Проблема в том, что вы снова открыли тег в середине условия. При попытке вашего кода я получаю синтаксическую ошибку. Странно, что вы смогли увидеть любую веб-форму. Это фиксированный код (который работает для меня).

<?php 
if (!isset($_GET['upload'])) { 
ECHO <<<END
  <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
  <input type="file" name="file" class="form">
  <input name="submit" type="submit">
  </form>
END;
 } else  if (isset($_GET['upload']) && $_GET['upload'] == 'true') {
    $url = $_FILES['file']['name'];
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg");
    if ($move) {
        echo "Success!";
    } else { 
        echo "Err...";
    } 
} ?>
2 голосов
/ 30 мая 2009

Если проблема связана с размером файла, добавьте следующие строки в файл php.ini, и он должен работать:

upload_max_filesize = 500M ;
post_max_size = 500M ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...