Das Hochladen einer PHP-SMB-Datei verursacht 500 Internal Server Error
P粉113938880
2023-08-30 13:53:12
<p>Wenn ich versuche, eine Datei in einem lokalen Ordner über SMB auf einen FTP-Server hochzuladen, wird die Datei hochgeladen, aber der Server gibt einen 500 Internal Server Error mit der folgenden Meldung zurück: </p>
<blockquote>
<p>Warnung: fopen(File.xls): Stream kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis</p>
</blockquote>
<p>Das ist meine Upload-Funktion: </p>
<pre class="brush:php;toolbar:false;">public function upload($fileToUpload, $targetPath = "") {
if (!empty($targetPath)) {
if (substr($targetPath, -1, 1) != '/') {
$targetPath .= "/";
}
}
$fileName = Basisname($fileToUpload);
$this->srvShare->put($fileToUpload, $targetPath . $fileName);
}</pre>
<p>In diesem Fall ist <strong>$fileToUpload</strong> so etwas wie „File.xls“.
Ich habe versucht, den gesamten Pfad an die Funktion zu übergeben, aber es kommt immer noch zu demselben Fehler.
Der Upload ist erfolgreich ... die Datei befindet sich bereits auf dem Server, aber der Code kann nicht fortgesetzt werden, da dies immer noch zu einem 500 Internal Server Error führt. </p>
<p>Dies ist die put()-Funktion in smb NativeShare: </p>
<pre class="brush:php;toolbar:false;">/*** Laden Sie lokale Dateien hoch
*
* @param string $source lokale Datei
* @param string $target Zieldatei
* @return bool
*
* @throws IcewindSMBExceptionNotFoundException
* @throws IcewindSMBExceptionInvalidTypeException*/
öffentliche Funktion 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);
return true;
}</pre></p>
好的..所以我成功修复了错误。 问题是我已经在其他地方使用了这个上传功能,并且我假设我可以再次使用它,并且参数相同..我需要更改一个参数,现在它可以工作:)