因此,对于练习,我正在制作一个允许用户将文件上传到我的网站的小表格。我正在使用wordpress,无论我在谷歌搜索什么,我只是获得插件的链接。由于我在练习中这样做,使用插件会破坏目的。
到目前为止,有效的是,当提交文件时,在wordpress安装的根目录中创建一个文件夹(如果它不存在)。然后,在该文件夹中,为当前用户创建另一个。所以现在服务器中有一个/ uploads /文件夹,文件会在那里上传。 我还在用户元数据中放了一个数组。该数组在每个索引处都包含一个关联子数组,其中包含文件名,路径和类型。我检查了phpMyAdmin,用户元数据更新也有效。
什么行不通的是所有文件都是不可能的。我从用户meta获取数组,然后为每个子数组I echo
<a href="[file_path]">[file_name] -> [file_type]</a>
<img src="[file_path]">Could not load image: [file_name]</img>
第一个用于文本文件,第二个用于图像。如果我单击文本文件的链接,它会给我404错误,URL看起来没问题,图像也不会显示。
下面是代码中所有光荣的混乱。我甚至尝试使用umask将所有权限设置为0777(在文件管理器中,上传文件夹获得此权限以及特定用户,但文件获得0644),因为我认为这可能是导致错误的原因。我根本不知道在哪里可以解决这个问题......
<?php
//response generation function
$response = "";
//function to generate response
function my_contact_form_generate_response($type, $message){
global $response;
if($type == "success") $response = "<div class='success'>{$message}</div>";
else $response = "<div class='error'>{$message}</div>";
}
function check_form() {
// Get & verify user
$current_user = wp_get_current_user();
if ( !($current_user instanceof WP_User) ) {
return 'Current user is invalid';
}
// Verify/create root upload directory
$upload_path = ABSPATH . 'uploads/';
if (!file_exists($upload_path)) {
$old_mask = umask(0);
if (!mkdir($upload_path, 0777, true)) {
return 'Could not create root upload directory';
}
umask($old_mask);
}
// Verify/create user upload directory
$current_user_dname = (string)$current_user->display_name;
$current_user_id = (string)$current_user->ID;
$upload_path .= $current_user_dname . $current_user_id;
if ( !file_exists( $upload_path ) ) {
// Create directory
$old_mask = umask(0);
if ( !mkdir( $upload_path, 0777, true ) ) {
return 'Could not create user upload directory.';
}
umask($old_mask);
// Register in user meta data
update_user_meta($current_user_id , 'uploaded_files', array());
}
$allowed_ftypes = array(
'.jpg', '.jpeg', '.bmp', '.png', '.gif',
'.txt', '.pdf'
);
$max_filesize = 524288; // 0.5MB
$file_name = $_FILES["userfile"]["name"];
$file_ext = strtolower( substr( $file_name, strpos( $file_name, '.' ), strlen( $file_name ) - 1 ) );
// Verify file type
if ( !in_array( $file_ext , $allowed_ftypes ) ) {
return 'The file you attempted to upload is not allowed.';
}
// Verify filesize
if ( !filesize( $_FILES["userfile"]["tmp_name"] ) > $max_filesize ) {
return 'The file you attempted to upload is too large.';
}
// Verify writing permissions
if ( !is_writable( $upload_path ) ) {
return 'You cannot upload the file to the specified directory.';
}
$full_path = $upload_path . '/' . $file_name;
if ( move_uploaded_file( $_FILES["userfile"]["tmp_name"], $full_path ) ) {
// Get simplified file type
$type = 'text';
if (array_search($file_ext, $allowed_ftypes) < 5) {
$type = 'image';
}
// Add to meta
$file_array = get_user_meta($current_user_id , 'uploaded_files', true);
$file_array_add = array(
'path' => $full_path,
'name' => $file_name,
'type' => $type
);
// Check file existence
$file_exists = false;
for ($i = 0; $i < count($file_array); $i++) {
$at_i = $file_array[$i];
if ($at_i['name'] === $file_name) {
$file_exists = true;
}
}
if (!$file_exists) {
$file_array[] = $file_array_add;
update_user_meta($current_user_id , 'uploaded_files', $file_array);
}
// Complete
return 'File uploaded successfuly, view it <a href="' . $full_path . '" title="Your File">here</a>.';
} else {
return 'There was an error uploading the file. Please, try again.';
}
}
if (!empty($_POST)) {
my_contact_form_generate_response("success", check_form());
}
?>
<style type="text/css">
.error{
padding: 5px 9px;
border: 1px solid red;
color: red;
border-radius: 3px;
}
.success{
padding: 5px 9px;
border: 1px solid green;
color: green;
border-radius: 3px;
}
form span{
color: red;
}
</style>
<div id="respond">
<?php echo $response; ?>
<form action="<?php the_permalink(); ?>" method="post" enctype="multipart/form-data">
<p>
<label for="file">Select a file:</label>
<input type="file" name="userfile" id="file"> <br />
<input type="hidden" name="submitted" value="1">
<input type="submit" value="upload">
<p>
</form>
</div>
<div id="my-files">
<?php
$current_user = wp_get_current_user();
if ( !($current_user instanceof WP_User) ) {
echo '<p>Undefined user</p>';
} else {
$file_array = get_user_meta($current_user->ID, 'uploaded_files', true);
// File array is empty
if ($file_array === '') {
echo '<p>No files</p>';
} else {
echo '<h3>Files:</h3><br/>';
$len = count($file_array);
for ($i = 0; $i < $len; $i++) {
$file_data = $file_array[$i];
$f_path = $file_data['path'];
$f_name = $file_data['name'];
$f_type = $file_data['type'];
if ($f_type === 'image') {
echo '<img src="' . $f_path . '">Can not get image: ' . $f_name . '</img>';
} else {
echo '<a href=' . $f_path . '>' . $f_name . ' -> ' . $f_type . '</a><br/>';
}
}
}
}
?>
</div>
编辑:
这是我更新的.htaccess文件:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /~mdg17761/druskamdg.com/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/?uploads/
RewriteRule . /~mdg17761/druskamdg.com/index.php [L]
</IfModule>
# END WordPress
旧的没有:
RewriteCond %{REQUEST_URI} !^/?uploads/
问题仍然存在,但我发布了.htaccess文件,因为有多个wordpress安装,所以上面的RewriteCond可能需要有点不同。我尝试在几个方面混合使用/~mdg17761/druskamdg.com/,但我没有让它工作。
答案 0 :(得分:0)
如果我正确理解您的问题,文件都已成功上传,但是通过浏览器访问文件是个问题。听起来你正在遇到Word重写Word使用的问题。重写从安装的根级别开始,并转移到子目录,除非另有说明。
在Wordpress安装的根目录中,查看你的.htaccess,并添加一行告诉它在重写时忽略子目录(在这种情况下,&#39; / uploads&#39;)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/?uploads/
RewriteRule . /index.php [L]
</IfModule>
# END WordPress