有一个问题从PHP支持我的数据库

时间:2012-11-28 02:17:12

标签: php mysql mysqldump fopen fwrite

我遇到的问题是fopen(),fwrite()和fclose()函数。这是我收到的错误:

警告:fopen(/db-backup-salisbury_school-20121128-021138.sql)[function.fopen]:无法打开流:C:\ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php上的权限被拒绝177

警告:fwrite()要求参数1为资源,在第178行的C:\ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php中给出布尔值

警告:fclose()要求参数1为资源,布尔值在第179行的C:\ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php中给出

这部分php的代码可以在下面找到任何帮助将非常感谢!

 * Save SQL to file
 * @param string $sql
 */
protected function saveFile(&$sql, $outputDir = '.')
{
    if (!$sql) return false;

    try
    {
        $handle = fopen($outputDir.'/db-backup-'.$this->dbName.'-'.date("Ymd-His", time()).'.sql','w+');
        fwrite($handle, $sql);
        fclose($handle);
    }
    catch (Exception $e)
    {
        var_dump($e->getMessage());
        return false;
    }

    return true;
}

} ?>

2 个答案:

答案 0 :(得分:1)

我相信他正在运行带有IIS的Windows Web服务器 - 根据C:\ Inetput \ wwwroot目录结构判断...所以在Windows中你需要这样接近它

如果您的脚本位于此处

C:\inetpub\wwwroot\omarejaz\sbyschool\q5.php

然后,您需要在输出目录中使用正确的Windows目录结构指定完整目录。请记住,您可能必须逃避\,因为,在PHP \ is和转义字符。

$OutputDir = "C:\\inetpub\\wwwroot\\omarejaz\\sbyschool\\tmp";

然后在Windows中确保您在“tmp”文件夹上设置了适当的权限,以允许IIS写入它。

答案 1 :(得分:0)

您需要将$ outputDir设置为'/ tmp'或PHP脚本可以写入的位置。

如果从命令行运行脚本,则运行脚本的用户需要写入权限。如果从Web浏览器运行,则apache或“nobody”需要写入权限。

使用chmod -R a+w <outputfolder>为所有用户设置写入权限。

如果您无权访问网络服务器,则可以根据此视频使用filezilla设置文件夹权限:http://www.youtube.com/watch?v=oq0oM2w9lcQ

如果您可以使用file_get_contents()获取文件的内容,只需将其回显到标准输出。如果您不打印任何其他内容,浏览器将提示您下载该文件。