0

我得到了这个 PHP 代码:

SESSION_start();

$conn = mysql_connect("localhost", "root", "");
if(!$conn) die("Cannot connect to the database server: <br />
    ".mysql_error());

$db = mysql_select_db("tsismics", $conn);
if(!$db) die("Cannot connect to the database: <br />
    ".mysql_error());

 $userId = $_SESSION['userId'];
 $dir = $userId."/".$_FILES['profpic']['name'];
 $filename = $_FILES['profpic']['name'];

 $target = "profile_pictures/".$userId."/";
 echo $target;

 mysql_query("UPDATE users SET photo=\"$dir\" WHERE userId=$userId", $conn);

 if(move_uploaded_file($_FILES['profpic']['tmp_name'], $target)) {
     echo "The file ". basename( $_FILES['profpic']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 
     echo "Sorry, there was a problem uploading your file."; 
 }

这是我的 HTML 块:

<form method="POST" action="upload-prof-pic.php" enctype="multipart/form-data">
    <input type="file" value="upload profile pic" name="profpic"/>
    <input type="submit" value="Upload" id="prof-pic-submit"> 
</form>

上传时,它会在文件夹中创建一个以 userId 作为文件名且没有任何扩展名的文件:profile_pictures


我忘了发布这个..它有这两个错误:

警告:move_uploaded_file(profile_pictures/1/3.png):无法打开流:第 22 行的 C:\wamp\www\project\upload-prof-pic.php 中没有这样的文件或目录

警告:move_uploaded_file(): Unable to move 'C:\wamp\tmp\php2070.tmp' to 'profile_pictures/1/3.png' in C:\wamp\www\project\upload-prof-pic.php on line 22

4

5 回答 5

2

哦,还要注意一件事(基于您更新的问题),因为您尝试将每张图片存储在以用户 ID 命名的新目录中,您还需要创建该目录并且显然具有写入权限。

mkdir

$target = "profile_pictures/".$userId."/";

应该

$target = "profile_pictures/".$userId."/".$filename;

哦,还在用那个著名的mysql_*api吗?

于 2013-04-02T07:34:09.507 回答
1

你需要 :

  1. 如果该文件夹不存在,则创建该文件夹
  2. 给它足够的权限来写入它
  3. 正确使用 move_uploaded_file。(文件参数的路径而不是文件夹)
  4. 停止使用 mysql_ 函数(见红色矩形?)

例子 :

session_start();

if(!empty($_FILES['profpic'])){
$conn = mysql_connect("localhost", "root", "");
if(!$conn) die("Cannot connect to the database server: <br />
    ".mysql_error());

$db = mysql_select_db("tsismics", $conn);
if(!$db) die("Cannot connect to the database: <br />".mysql_error());

$userId = $_SESSION['userId'];
$filename = $_FILES['profpic']['name'];

$target = "profile_pictures/".$userId.'/'.$filename;
echo $target;

mysql_query("UPDATE users SET photo=\"$dir\" WHERE userId=$userId", $conn);
if(!file_exists("profile_pictures/".$userId)){
   mkdir("profile_pictures/".$userId, 700);
}
if(move_uploaded_file($_FILES['profpic']['tmp_name'], $target)) {
     echo "The file ". basename( $_FILES['profpic']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 
     echo "Sorry, there was a problem uploading your file."; 
 }
}
于 2013-04-02T08:05:08.137 回答
0

我不确定这是它还是它是否有效,但请尝试更改SESSION_start();session_start();

看起来您可能想要删除 / 甚至更好地创建时间/文件名的 md5,因此 profile_pictures/1/3.png 正在寻找 profile_pictures/1 作为目录

使用这样的东西可能会奏效

$file = md5($_FILES['profpic']['name'] . microtime(true)) . "." . pathinfo($_FILES['profpic']['name'], PATHINFO_EXTENSION);

应该给你一些东西,比如79054025255fb1a26e4bc422aef54eb4.png使用 pathinfo() 保留扩展名

编辑: 再次查看您的问题,该文件不是给您/1的文件夹。我建议将所有个人资料头像放在一个文件夹中,而不是每个用户都有一个文件夹,其中包含一个文件。更改以下行

$target = "profile_pictures/".$userId."/";

$target = "profile_pictures/". $_FILES['profpic']['name'];
#OR
$target = "profile_pictures/" . $file;#if using md5 as above

我仍然建议使用如上所述的 md5 来克服相同的文件名上传

于 2013-04-02T07:41:24.867 回答
0

我认为您正在尝试创建文件夹或目录并将文件一起上传。在这种情况下,我会建议你先执行这个命令:

mkdir("profile_pictures/".$userId , 700);

在上传文件之前创建目录。

希望不会有问题...

于 2013-04-02T08:01:07.490 回答
0

正如我告诉你的,你早先发布的错误表明文件夹“1”不存在或至少没有上传到的权限,所以我认为你必须检查它是否不存在,如果是这样的话创建它然后将其权限更改为合适的权限使用chmod并继续上传过程。希望这能解决你的问题:)

于 2013-04-02T08:01:46.623 回答