가능한 중복 : 나는 자바 응용 프로그램에서 이진 파일을 업로드하고 PHP 스크립트를 통해 처리하기 위해 노력하고있어
Headers already sent by PHPPHP는 "헤더 정보를 수정할 수 없습니다 - 이미 보낸 헤더를"
서버 측.
그러나 이클립스 (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>
";
}
>
그리고 여기 내 자바 측 코드입니다 :
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
바이트 = 8,804,659
경고을 양도 : 알 수 없음 : 8,804,659 바이트 POST의 콘텐츠 길이가
라인 0
에 알 수없는에서 8,388,608 바이트의 제한을 초과 경고 : 헤더 정보를 수정할 수 없습니다 - 헤더가 이미 경고 라인 0
에 알 수없는 전송 : 칸 OT는 헤더 정보를 수정할 - 헤더가 이미 C로 전송 : \ WAMP \ www가 \ 행에 testhttpfileupload3.php 2
공지 사항 : 정의되지 않은 변수 : C에서 파일 이름 : \ WAMP \ www가 \ testhttpfileupload3.php 라인34
공지 : 정의되지 않은 변수 : 의 청크 C : \ WAMP \ WWW \ 라인 testhttpfileupload3.php 34
012 3,516,
경고 :는 fopen (./ uploaded_file) function.fopen] : 그런 파일이나 디렉토리 C에서 : 스트림을 열지 못했다 \ WAMP \ www가 \ 행에 testhttpfileupload3.php 34
<?xml version="1.0" encoding="UTF-8"?>
<data>
<status type="file_upload">
<value>ok</value>
</status>
</data>
thnx sooo much ... 당신 말이 맞아요 .... 경고 메시지가 초기 헤더로 전송되고 있습니다 ... –
시작 오류가 흔하지 않지만, 하지만 코드가 실행되기 전에 코드가 실행되기 전에 코드가 실행됩니다.이 코드는 여기서 발생합니다. 기꺼이 도와주세요. – drew010