PHP SMB ファイルのアップロードにより 500 内部サーバー エラーが発生する
P粉113938880
2023-08-30 13:53:12
<p>ローカル フォルダー上のファイルを SMB 経由で FTP サーバーにアップロードしようとすると、ファイルはアップロードされますが、サーバーは次のメッセージとともに 500 内部サーバー エラーを返します。 </p>
<ブロック引用>
<p>警告: fopen(File.xls): ストリームを開けません: そのようなファイルまたはディレクトリはありません</p>
</blockquote>
<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 Internal Server Error が発生するためコードを続行できません。 </p>
<p>これは smb NativeShare の put() 関数です。</p>
<pre class="brush:php;toolbar:false;">/*** ローカルファイルをアップロードする
*
* @param string $source ローカル ファイル
* @param string $target ターゲット ファイル
* @return bool
*
* @throws \Icewind\SMB\Exception\NotFoundException
* @throws \Icewind\SMB\Exception\InvalidTypeException*/
パブリック関数 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);
true を返します。
}</pre></p>
わかりました。エラーは正常に修正されました。 問題は、このアップロード関数を他の場所で使用したことがあり、同じパラメータで再度使用できると想定していることです。パラメータを 1 つ変更する必要がありますが、機能するようになりました :)