PHP SMB 파일 업로드로 인해 500 내부 서버 오류 발생
P粉113938880
2023-08-30 13:53:12
<p>SMB를 통해 로컬 폴더에 있는 파일을 FTP 서버에 업로드하려고 하면 파일이 업로드되지만 서버는 다음 메시지와 함께 500 내부 서버 오류를 반환합니다. </p>
<인용문>
<p>경고: fopen(File.xls): 스트림을 열 수 없습니다. 해당 파일이나 디렉터리가 없습니다</p>
</인용문>
<p>내 업로드 기능은 다음과 같습니다.</p>
<pre class="brush:php;toolbar:false;">공개 함수 업로드($fileToUpload, $targetPath = "") {
if (!empty($targetPath)) {
if (substr($targetPath, -1, 1) != '/') {
$targetPath .= "/";;
}
}
$fileName = 기본 이름($fileToUpload);
$this->srvShare->put($fileToUpload, $targetPath . $fileName);
}</pre>
<p>이 경우 <strong>$fileToUpload</strong>는 'File.xls'와 같습니다.
전체 경로를 함수에 전달하려고 시도했지만 여전히 동일한 오류가 발생합니다.
업로드가 성공했습니다. 파일이 이미 서버에 있지만 여전히 500 내부 서버 오류가 발생하므로 코드를 계속 진행할 수 없습니다. </p>
<p>이것은 smb NativeShare의 put() 함수입니다: </p>
<pre class="brush:php;toolbar:false;">/*** 로컬 파일 업로드
*
* @param string $source 로컬 파일
* @param string $target 대상 파일
* @return 부울
*
* @throws IcewindSMBExceptionNotFoundException
* @throws IcewindSMBExceptionInvalidTypeException*/
공개 함수 put($source, $target) {
$sourceHandle = fopen($source, 'rb');
$targetUrl = $this->buildUrl($target);
$targetHandle = $this->getState()->create($targetUrl);
while ($data = fread($sourceHandle, NativeReadStream::CHUNK_SIZE)) {
$this->getState()->write($targetHandle, $data, $targetUrl);
}
$this->getState()->close($targetHandle, $targetUrl);
사실을 반환;
}</pre></p>
알겠습니다..그래서 오류를 성공적으로 수정했습니다. 문제는 이 업로드 기능을 다른 곳에서 사용해 봤고 동일한 매개변수로 다시 사용할 수 있다고 가정하고 있다는 것입니다. 매개변수 하나를 변경해야 하는데 이제 작동합니다 :)