繁体   English   中英

PHP上载脚本无法在新主机上正常运行

PHP Upload Script not Functioning Properly with New Host

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经建立了一个PHP脚本,该脚本创建一个目录并将一个文件上传到该目录。 我的问题是,当我使用脚本创建目录时,文件将不会完全上传。 我在不同的主机上运行了完全相同的脚本,并且上传过程运行良好。 另外,如果我手动创建上传目录并通过ftp应用chmod 777,则传输工作正常。 托管服务提供商是否可能需要进行某种设置以使其功能正常运行?

这是上传表格:

<form action="/uploadFile.php" method="post"
enctype="multipart/form-data">
<label for="img_preview">Preview Image:</label>
<input type="file" name="img_preview" id="img_preview" />
<br />

<input type="hidden" name="id" value="newDirectory" />
<input type="submit" name="submit" value="Upload Flyer" />
</form>

这是我的PHP脚本(uploadFile.php):

$thisdir = getcwd(); 
$new_dir = $_POST['id'];
$full_dir = $thisdir . "/upload/" . $new_dir;

function chk_dir($full_dir) {
if(is_dir($full_dir)) {
    echo 'welcome back';
} else {
    return mkdir($full_dir);
}

}
chk_dir($full_dir);
chmod($full_dir, 0777);
?>

<?php
//upload image

if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["img_preview"]["error"] . "<br />";
  }
else
  {

  }
  //set image restrictions
?> 

<?php
if ((($_FILES["img_preview"]["type"] == "image/gif")
|| ($_FILES["img_preview"]["type"] == "image/jpeg")
|| ($_FILES["img_preview"]["type"] == "image/pjpeg"))
&& ($_FILES["img_preview"]["size"] < 80000))
  {
  if ($_FILES["img_preview"]["error"] > 0)
    {
echo "Please only upload an image for previewing (jpg or gif)...<br>
Also, check to         make     sure the filesize is less than 8MB" .          $_FILES["img_preview"]["error"] .     "<br />";
}
  else
{

//check the image into new directory
if (file_exists("upload/". $new_dir ."/". $_FILES["img_preview"]["name"]))
  {
  echo "It seems that " . $_FILES["img_preview"]["name"] . " already exists.";
  }
else
  {
  move_uploaded_file($_FILES["img_preview"]["tmp_name"],
  "upload/" . $_POST['id'] . "/" . $_FILES["img_preview"]["name"]);
  echo "image file has transferred successfully!";
      }
    }
  }
else
  {
  echo "Invalid file please contact for assistance.";
  }
?> 

另外,当我运行脚本时,不会产生任何错误,并且文件回显“图像文件已成功传输!”。 但是当我在新位置检查文件时,它完全无效。 感谢您在此问题上的宝贵时间。

4 个回复

首先,您的脚本有一个安全漏洞。 切勿使用传递的$ _POST数据创建系统目录。 永远不要将0777用于任何事情。

move_uploaded_file()在失败时返回false,即使失败,您仍然会收到成功消息(在您的代码中)

打开display_errors和错误日志记录,然后重试。

您已经独立使用过move_uploaded_file() 如果返回false,那么还将显示sucsess消息。

尝试

if ( move_uploaded_file($_FILES["img_preview"]["tmp_name"],
  "upload/" . $_POST['id'] . "/" . $_FILES["img_preview"]["name"])) {
echo "sucess";
}else{
echo "fail";
}

之后,您将了解主要问题。 还可以在move_uploaded_file()之前通过print_r($_FILES)使用调试点。

这可能不是您所提问题的答案,但我希望仍然值得您注意。 不要依赖通过$_FILES发送的文件类型,据我所知,这只是浏览器发送的mime类型,它很容易被破坏。 使用getimagesize()函数获取真实的图像类型以及高度/宽度。

源文件名也是如此,但这不应构成安全漏洞。

看来您的问题已包含答案(通过FTP创建目录时,上传有效)。

我想新服务器启用了safe_mode,因此它将在文件操作中检查文件所有者的UID。

怎么了:

  1. 您的脚本创建了一个目录,所有者将是网络服务器
  2. 您的脚本(脚本的所有者通常是ftp用户)尝试chmod目录

脚本(owner:ftp)无法更改目录(owner:webserver)的目录,因为UID不同。

解决方案:使用ftp_mkdir()创建目录。

1 我的PHP脚本无法正常运行

大家好,我就是您所说的“厚实”。 而且我正在尝试创建一个PHP注册页面。 我似乎有能力做一些事情,但似乎没有将信息注册到MY SQL PHPmyAdmin中。 例如:它指出一旦您填写了表格,信息已被注册,但是数据库中没有任何内容,我想知道是否有人可以帮我看看我在做什么错。 我是网站建 ...

2011-03-20 13:57:04 5 264   php
2 PHP脚本无法正常运行

下面的代码部分是一个PHP脚本,该脚本应该将新的段添加到数据库中。 在这种情况下,段是两个编号节点之间的链接。 首先,脚本应该检查该段是否已在数据库中。 例如: 该示例假定该段位于数据库中已经存在的节点1和2之间,因此即使节点值取反,也不应添加该段。 但是下面的代码不起作用,我不 ...

3 脚本无法在服务器上运行,但在本地主机上可以正常运行

我的脚本有问题,我制作了一个登录脚本,您在其中输入用户名和密码,并且可以在我的本地主机上正常运行(即,我可以登录并退出对管理面板的访问权限),然后将其上传到服务器上,但是令人困惑的部分是,当我尝试使用正确的用户名和密码登录时,它无法访问管理面板,并向我显示访问被拒绝的消息,就像会话未在服务器上进 ...

2013-10-06 18:32:58 0 679   php/ mysql
4 PHP-登录脚本无法正常运行

我有一个问题问你。 我正在创建一个管理面板,这对我来说是第一次,但我遇到了一些问题。 1.问题我以这种方式使用mysqli_fetch_assoc(): 我用它来查看数据库中是否有一些条目,无论我在字段中插入什么内容,它每次都会返回1。 我认为如果数据库中没有任何条目,则必须返 ...

6 Shell脚本无法正常运行

我有一个linux shell脚本,当从命令行运行完美但但是当计划通过crontab运行时,它没有给出所需的结果。 该脚本非常简单,它通过使用pidof命令检查是否找到了它的pid来检查mysql-proxy是否正在运行。 如果发现关闭,它会尝试启动代理。 该脚本保存在文件che ...

7 JavaScript shop脚本无法正常运行

我正在尝试使此商店脚本包含以下条件: 余额不能低于0 如果没有足够的资金,将使用代金券。 它记录了凭证的使用和成功确认。 现在,余额确实降到了零以下,并且优惠券没有被使用……也许这很明显,但是我却发疯了。 另外,有什么技巧可以优化此代码? 谢谢! ...

8 tcl脚本无法正常运行

我正在使用tcl脚本打开与Linux机器的ssh连接并打开虚拟交换机应用程序。 在交换机CLI内,我添加了&gt; 1000条IP路由。 我以= ./script_name.tcl而不是tclsh身份运行脚本,因为这会给我一些错误。 问题出在tcl如何解释tcl脚本中的while循 ...

9 Makefile脚本无法正常运行

我有这些文件main.c , fun.c和fun.h 我想使用makefile脚本而不是传统的编译方法来运行。 发布以下makefile脚本的人说,此脚本将自动捕获同一目录中的文件名,因此,我所需要的只是导航到项目目录并在终端$ make写入。 我创建了一个文件makefile并放置了以下 ...

10 脚本无法正常运行

我使用此脚本在页面上显示按钮 我得到了所需的按钮,但在按钮之前也得到了undefined按钮。 如何使它不出现? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM