0

我遇到的问题是 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;
}

} ?>

4

2 回答 2

1

我相信他正在使用 IIS 运行 Windows 网络服务器 - 从 C:\Inetput\wwwroot 目录结构判断......所以在 Windows 中你需要以这种方式处理它

如果您的脚本位于此处

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

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

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

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

于 2012-11-28T15:21:12.897 回答
0

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

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

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

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

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

于 2012-11-28T02:31:40.940 回答