【问题标题】:Upload file to remote FTP server errors上传文件到远程 FTP 服务器错误
【发布时间】:2020-02-27 14:02:59
【问题描述】:

最近,我一直在处理上传表单。这个想法是用户可以将他们的文件上传到远程 FTP 服务器。但是,它没有按预期工作。

在我开始上传文件之前,我收到以下错误:“无法将上传的文件移动到工作目录”。同样,我还没有开始上传文件。

这是我的 PHP 代码:

<?php


//FTP variabelen met de values

$host = "radioprogrammabank.nl";

$user = "***";  

$pass = "***";

//location I want to send the uploaded file to (it is remote)
$destDir = "/domains/radioprogrammabank.nl/public_html/wp/wp-content/uploads";


$dehost = $_POST[$host];

$deuser = $_POST[$user];

$depass = $_POST[$pass];

$dedestDir = $_POST[$destDir];


$workDir = "\Users\stagiaire01\Uploads"; // definieer het lokale systeem

// get temporary file name for the uploaded file

$tmpName = basename($_FILES['file']['tmp_name']);

// copy uploaded file into the current directory

move_uploaded_file($_FILES['file']['tmp_name'], $workDir."/".$tmpName) or die('Cannot move uploaded file to working directory');

// maak connectie, als het niet werkt. Die en geef een melding

$conn = ftp_connect($host) or die ("Cannot initiate connection to host");

// send access parameters

ftp_login($conn, $user, $pass) or die("Cannot login");

// Voer de file upload uit

$upload = ftp_put($conn, $destDir."/".$_FILES['file']['name'], $workDir."/".$tmpName, FTP_BINARY);

// check upload status

// display message

if (!$upload) {

    echo "Upload mislukt";

} else {

    echo "Upload geslaagd";

}

// sluit de FTP connectie

ftp_close($conn);

// verwijder de lokale kopie van het bestand

unlink($workDir."/".$tmpName) or die("Cannot delete uploaded file from working directory -- manual deletion recommended");

?>

我的 HTML 代码:


<html>
<body>
<h2>U kunt hier uw album uploaden</h2>

<form enctype="multipart/form-data" method="post" action="upload.php">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />

File <br />
<input type="file" name="file" /><p />

<input type="submit" name="submit" value="Upload Album" />
</form>

</body>
[xyz-ips snippet="verbindftp"]
</html>

您可能想知道为什么我的 HTML 中有一个短代码。代码是用 Wordpress 编写的。我使用一个可以编写 PHP 的插件。该代码在编写此简码时有效。

我也试过做一个 $_FILES 的 var_dump 告诉我以下内容:

"array(0) { } Upload misluktCannot delete uploaded file from working directory -- manual deletion recommended"

我不知道为什么在执行 var_dump 时会收到此消息。我在上面的值中设置了我的主机、用户名、密码和方向。由于安全原因,密码和用户名没有显示。

我在 * 上找不到这个问题的任何答案。但是,我确实希望我为您提供了足够的信息来帮助我。我希望能够将文件上传到远程 FTP 服务器。

您好,

Parsa_237

【问题讨论】:

  • 不,我没有。我现在就读。但是,由于我在 Wordpress 工作,所以我觉得我很有限,必须在这个项目上做更多的工作(不是我个人的选择哈哈)
  • 没有unlink()你试过了吗
  • 不,我将删除该行并给您结果。虽然它甚至不应该给出这个错误。因为我还没有上传文件。当我在代码周围添加 if(isset($_POST["button"])) 时,我根本没有得到任何结果。
  • 我认为 $workDir 有问题尝试使用 /

标签: php wordpress ftp


【解决方案1】:

您需要检查是否正在上传,否则,即使用户尚未开始上传,它也会在页面加载时尝试连接到 FTP 服务器。

例如

if ( empty( $_FILES['file'] ) ) {
    return;
}

附带说明,我注意到您正在使用 PHP Snippets 插件,这个插件和其他类似插件非常危险。相反,在 PHP 文件中使用 add_shortcode 将 PHP 的 sn-ps 嵌入页面内。

这就是你遇到这个问题的原因,最初的教程假设你将 PHP 代码放在一个名为 upload.php 的 PHP 文件中,所以它只会在提交表单时运行。但是这个插件不是这样的

【讨论】:

  • 我会查看 add_shortcode。只是复制粘贴此代码?感谢您的回答。
  • if 语句应该放在 PHP 代码顶部附近的某个地方
  • 我的上传表单根本没有显示。我希望它返回“你好”,但它没有。这是我网站的链接:radioprogrammabank.nl/wp/upload-album。如你看到的。没有显示上传表单。
  • 你有没有按照我说的把它放在 PHP 代码的顶部?还是您将其放在您在问题中描述为 HTML 的部分中?该页面永远不会完成渲染,因此发生了 PHP 致命错误,您将需要错误消息。请注意,除了您在此处询问的问题之外,您的上传表单还有许多其他问题,例如,表单标签引用了一个不存在的文件,并且还有其他问题是由于采用为一个上下文设计的代码并将它在完全不同的地方。我的回答只针对您提出的问题,并不能解决所有问题
  • 抱歉汤姆回复晚了。我想我会用其他代码重新开始。我的代码有太多错误。我会接受你对我的问题的回答,因为它确实帮助我解决了我的第一个错误。