在WordPress中将文件上载到自定义目录的正确语法

时间:2013-12-09 作者:Matthew

我有当前的PHP代码,可以在表单上附加文件。这些文件必须转到某个目录。我知道在Wordpress中附加时,我需要使用不同的语法。然而,我已经读了好几天的书,从字面上看我是如何做到这一点的。同样,我的代码在独立的PHP页面上工作,但在Wordpress中不工作。我也不担心安全问题,因为我的页面位于防火墙后面的intranet站点上,否则无法访问。我在WP uploads文件夹中看到了一些上传到自定义目录的教程和代码,但我需要上传到web服务器根目录中。这是我目前在独立PHP页面上的代码。

$folderPath = "/jobtracking/files/standard/{$projID}";
mkdir($folderPath);

$filename = basename($_FILES["Attach_Files"]["name"]);
$filetype = $_FILES["Attach_Files"]["type"];
$datei = "/jobtracking/files/standard/{$projID}/{$filename}";
$target_path = $folderPath . "/" . $filename;
    if(move_uploaded_file($_FILES["Attach_Files"]["tmp_name"], $target_path)) {
    mysql_query("INSERT INTO files(files.name, files.project, files.added, files.datei, files.type, files.folder) VALUES(\'{$filename}\', \'{$projID}\', UNIX_TIMESTAMP(now()), \'{$datei}\', \'{$filetype}\', 0)");
    }
chmod("{$target_path}", 0777);
我在wp\\u handle\\u上传上看到了codex,但不确定这是否适用于我的需要。我觉得这正是我需要使用的,但很难找到适合我所要做的事情。我根本不需要表格附件进入Wordpress。

我看到了这个article 这似乎很有希望,但仍在上传,将文件放在WP目录内,而不是外部。

还尝试使用this article 作为参考。

我的问题是,如何在自定义Wordpress页面模板中有一个单独的文件附件表单字段,以遵循我当前的PHP并上传到WP之外的自定义目录?

提前感谢您的建议!

**更新12.13.13

我尝试使用site\\u url建立正确的文件夹路径,但仍然没有成功。这是我迄今为止尝试的代码。

$folderPath = site_url(\'/jobtracking/files/standard/{$projID}\');
mkdir($folderPath);
$filename = basename($_FILES["Attach_Files"]["name"]);
$filetype = $_FILES["Attach_Files"]["type"];
$datei = site_url(\'/jobtracking/files/standard/{$projID}/{$filename}\');
$target_path = $folderPath . "/" . $filename;
    if(move_uploaded_file($_FILES["Attach_Files"]["tmp_name"], $target_path)) {
    mysql_query("INSERT INTO files(files.name, files.project, files.added, files.datei, files.type, files.folder) VALUES(\'{$filename}\', \'{$projID}\', UNIX_TIMESTAMP(now()), \'{$datei}\', \'{$filetype}\', 0)");
    }
chmod("{$target_path}", 0777);
**更新日期:2014年1月31日

似乎我甚至没有在表单提交时创建目录。文件夹现在都设置为0777,只是为了确保我拥有测试所需的所有读/写权限。我还阅读了关于使用wp\\u mkdir\\u p()的内容;而不是mkdir();使用Wordpress时。我不知道是否可以对wp\\u mkdir\\u p();)中的字符串使用变量;。一旦我可以创建目录并将文件移入,我感觉我已经完成了一半。

**更新:2014年3月2日

$folderPath = ABSPATH . \'/jobtracking/files/standard/{$projID}\';

wp_mkdir_p($folderPath, 0777, true);

$filename = basename($_FILES[\'Attach_Files\'][\'name\']);
$filetype = $_FILES[\'Attach_Files\'][\'type\'];
$datei = ABSPATH . \'files/standard/{$projID}/{$filename}\';
$target_path = $folderPath . "/" . $filename;
    if(move_uploaded_file($_FILES[\'Attach_Files\'][\'tmp_name\'], $target_path)) {
    mysql_query("INSERT INTO files (files.name, files.project, files.user, files.added, files.datei, files.type, files.folder) VALUES(\'{$filename}\', \'{$projID}\', 0, UNIX_TIMESTAMP(now()), \'{$datei}\', \'{$filetype}\', 0)");
    }
chmod("{$target_path}", 0777);
**更新02.04.14--这将创建目录并将文件放入其中。但是,信息仍然没有进入数据库。也许我没有使用if();正确地

$folderPath = "/jobtracking/files/standard/{$projID}";

mkdir(ABSPATH.$folderPath, 0777, true);

$filename = basename($_FILES[\'Attach_Files\'][\'name\']);
$filetype = $_FILES[\'Attach_Files\'][\'type\'];
$datei = \'files/standard/{$projID}/{$filename}\';
$target_path = ABSPATH.$folderPath . "/" . $filename;
    if(move_uploaded_file($_FILES[\'Attach_Files\'][\'tmp_name\'], $target_path)) {
    mysql_query("INSERT INTO files (files.name, files.project, files.user, files.added, files.datei, files.type, files.folder) VALUES(\'{$filename}\', \'{$projID}\', 0, UNIX_TIMESTAMP(now()), \'{$datei}\', \'{$filetype}\', 0)");
    }
chmod("{$target_path}", 0777);
**更新02.04.14-有效!!!这是我的代码:

$folderPath = "/jobtracking/files/standard/{$projID}";

mkdir(ABSPATH.$folderPath, 0777, true);

$filename = basename($_FILES[\'Attach_Files\'][\'name\']);
$filetype = $_FILES[\'Attach_Files\'][\'type\'];
$datei = "files/standard/{$projID}/{$filename}";
$target_path = ABSPATH.$folderPath . "/" . $filename;
    if(move_uploaded_file($_FILES[\'Attach_Files\'][\'tmp_name\'], $target_path)) {
    mysql_query("INSERT INTO files (files.name, files.project, files.user, files.added, files.datei, files.type, files.folder, files.visible) VALUES(\'{$filename}\', \'{$projID}\', 5, UNIX_TIMESTAMP(now()), \'{$datei}\', \'{$filetype}\', 0, \' \')");
    }
chmod("{$target_path}", 0777);

1 个回复
最合适的回答,由SO网友:Matthew 整理而成

(更新答案:05.27.15)最终有效的方法是使用ABSPATH:

$folderPath = "/jobtracking/files/standard/{$projID}";

mkdir(ABSPATH.$folderPath, 0755, true);

$filename = basename($_FILES[\'Attach_Files\'][\'name\']);
$filetype = $_FILES[\'Attach_Files\'][\'type\'];
$datei = "files/standard/{$projID}/{$filename}";
$target_path = ABSPATH.$folderPath . "/" . $filename;
    if(move_uploaded_file($_FILES[\'Attach_Files\'][\'tmp_name\'], $target_path)) {
    mysql_query("INSERT INTO files (files.name, files.project, files.user, files.added, files.datei, files.type, files.folder, files.visible) VALUES(\'{$filename}\', \'{$projID}\', 5, UNIX_TIMESTAMP(now()), \'{$datei}\', \'{$filetype}\', 0, \' \')");
}
chmod("{$target_path}", 0755);
我还确保将0777改为0755。

结束

相关推荐

在自定义的Single-Portfolio.php中使用COMMENTS_TEMPLATE

我希望我的用户能够在我的公文包页面上发表评论。我用自定义帖子创建了一个公文包页面。在我的博客上,我正在使用comments\\u template();然后是评论。php我有代码。在博客方面,它100%有效但是当我添加comments\\u template()时;在公文包单页上,它什么都不做。我没有收到任何错误或任何东西。人们如何在公文包页面中实现评论?您不能使用相同的注释。所有注释的php文件,b谢谢