2012-06-17 5 views
-2

Можно создать дубликат:
Headers already sent by PHPPHP «Не удается изменить информацию в заголовке - заголовки уже прислал»

Я пытаюсь загрузить двоичный файл из приложения Java и обрабатывать его через PHP скрипт на стороне сервера.

Но он показывает следующий журнал, когда я запускаю код в Eclipse (для Java).

Хотя я отправляю информацию заголовка в первой строке, почему он отображает это сообщение.

Вот мой PHP код:

<?php 
header('Content-type: application/xml'); 

/*******************************************/ 
$DIRECTORY_SEPARATOR = "/"; 
$BUF_SIZE = 4096; 

/*******************************************/ 
uploadFile(); 
sendResponse(); 

/*******************************************/ 
function uploadFile() 
{ 
    global $DIRECTORY_SEPARATOR; 
    global $BUF_SIZE; 
    $targetDir = "." . $DIRECTORY_SEPARATOR . "uploaded_file"; 

    /***************************************/ 
    // 5 minutes execution time 
    @set_time_limit(5 * 60); 

    /***************************************/ 
    // Set filename 
    $filename="temp_aa.mp3"; 

    /***************************************/ 
    if (!file_exists($targetDir)) 
    { 
     mkdir($targetDir,0777,true); 
    } 

    /***************************************/ 
    $out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab"); 
    if ($out) 
    { 
     $in = fopen("php://input", "rb"); 
     if ($in) 
     { 
      while ($buff = fread($in, $BUF_SIZE)) 
      { 
       fwrite($out, $buff); 
      } 

      fclose($in); 
     } 
     else 
     { 
      fclose($out); 
      return ; 
     } 
    } 
    else 
    { 
     return ; 
    } 
} 

function sendResponse() 
{ 
    echo " 
    <?xml version=\"1.0\" encoding=\"UTF-8\"?> 
    <data> 
     <status type=\"file_upload\"> 
      <value>ok</value> 
     </status> 
    </data> 
    "; 
} 

>

И вот мой код Java-сторона:

import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 


public class TestHttp 
{ 
    public static void main(String[] args) 
    { 
     HttpURLConnection httpUrlConnection = null; 
     File mFileToUpload = new File("c:/aa.mp3"); 
     int byteTrasferred = 0, mBufferSize = 4096, mTempBytesRead = 0; 
     byte[] mBuffer = new byte[mBufferSize]; 

     try 
     { 
      httpUrlConnection = (HttpURLConnection)new URL("http://127.0.0.1/testhttpfileupload3.php").openConnection(); 
      httpUrlConnection.setDoOutput(true); 
      httpUrlConnection.setRequestMethod("POST"); 
      OutputStream os = httpUrlConnection.getOutputStream(); 
      Thread.sleep(1000); 
      BufferedInputStream fis = new BufferedInputStream(new FileInputStream(mFileToUpload)); 

      while((mTempBytesRead = fis.read(mBuffer)) != -1) 
      { 
       os.write(mBuffer, 0, mTempBytesRead); 

       byteTrasferred += mTempBytesRead; 
       System.out.println("byteTrasferred = " + byteTrasferred); 
      } 

      fis.close(); 
      os.close(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

     try 
     { 
      BufferedReader in = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream())); 

      String s = null; 
      while ((s = in.readLine()) != null) 
      { 
       System.out.println(s); 
      } 
      in.close(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

А вот журнал ошибок:

байт Передано = 8802304

байт Переведен = 8804659
Предупреждение: неизвестно: POST Content-Length из 8804659 байт превышает предел 8388608 байт в Unknown на линии

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже отправлены в Unknown на линии

Предупреждение: Cann ВЗ изменить информацию в заголовке - заголовки уже отправлены в C: \ WAMP \ WWW \ testhttpfileupload3.php на линии

Примечание: Undefined переменной: имя_файла в C: \ WAMP \ WWW \ testhttpfileupload3.php на линии

Примечание: Undefined переменной: кусок в C: \ WAMP \ WWW \ testhttpfileupload3.php на линии

Предупреждение: Еореп (./ uploaded_file) [function.fopen]: не удалось не удалось открыть поток: Нет такого файла или каталога в C: \ WAMP \ WWW \ testhttpfileupload3.php на линии

<?xml version="1.0" encoding="UTF-8"?> 
    <data> 
     <status type="file_upload"> 
      <value>ok</value> 
     </status> 
    </data> 

ответ

2

Похоже, что вы испытываете ошибку PHP запуска, который выводится на воображаемой линии 0 (перед любым из кода выполняется).

Предупреждение Unknown: POST Content-Length of 8804659 bytes exceeds the limit of 8388608 bytes in Unknown on line 0 выдается перед вызовом header, поэтому он не позволяет работать.

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

+0

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

+0

ошибки запуска являются необычными, но когда они происходят, они происходят до того, как какой-либо из ваших кодов выполняется, что и происходит здесь. рад помочь. – drew010

1

Предупреждающее сообщение, которое выписано, вызывает отправку начальных заголовков HTTP. После этого команда заголовка, которую вы передаете, больше не работает, поскольку вы уже выдали это предупреждение.

Решение является либо изменить ограничение после загрузки, либо отключить display_errors в php.ini

+0

ОК, пройдите ... thnx sooo much :-) –

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

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