我的php脚本不会打开不在其根目录中的文件

时间:2016-05-07 19:02:12

标签: php

  1. 这是我正在开发的用户登录系统的php脚本。
  2. 我需要它来读取/写入/students/students.txt文件,但它甚至不会读取文件中已包含的内容。
  3. https://api.mindbodyonline.com/0_5/ClassService.asmx
    

5 个答案:

答案 0 :(得分:2)

您没有正确使用//reading a file if ($handle = fopen("/students/students.txt", "r")) { echo "info obtained:<br>"; while (($buffer = fgets($handle))!==false) { echo $buffer;} fclose($handle); } //writing/overwriting a file if ($handle = fopen("/students/students.txt", "w")) { fwrite($handle, "hello/n"); fclose($handle); } 。该函数返回一个句柄,然后用于读取或编辑文件,例如:

 <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"`enter code here`>

                <---------Content Here --------------->
            </LinearLayout>
       </ScrollView>
    </LinearLayout>

如果这对您有用,请告诉我。

P.S。:对评论员提出建设性反馈意见。

答案 1 :(得分:1)

有许多方法可以读取/写入文件,正如其他人所证明的那样。我只想说明你的特定方法中的错误。

fread将文件句柄作为参数,而不是表示文件路径的字符串。

所以你的行:

$content = fread("/students/students.txt", filesize("/students/students.txt"));不正确。

应该是:

$file_handle = fopen("/students/students.txt", "r");
$content = fread($file_handle, filesize("/students/students.txt"));

使用fwrite将内容写入文件时也是如此。它对文件的引用是使用File Handle而不是文件路径打开的fopen。使用fopen()打开文件时,您还可以检查返回的$ file_handle是否为有效资源或是否为false。如果为false,则表示fopen操作不成功。

所以你的代码:

fopen("/students/students.txt", "w");
fwrite("/students/students.txt", $content."\n".$SID);
fclose("/students/students.txt"); 

需要重写为:

$file_handle = fopen("/students/students.txt", "w");
fwrite($file_handle, $content."\n".$SID);
fclose($file_handle);

您可以看到fclose也对文件句柄进行操作。

文件句柄(根据php.net):

 A file system pointer resource that is typically created using fopen().

答案 2 :(得分:0)

以下是一些诊断函数,可用于验证文件是否存在且可读。如果是权限问题,则会为您提供需要权限的用户的名称。

function PrintMessage($text, $success = true)
{
    print "$text";
    if ($success)
        print "&nbsp;[<font color=\"green\">Success</font>]<br />\n";
    else
        print("&nbsp;[<font color=\"red\">Failure</font>]<br />\n");
}
function CheckReadable($filename)
{
    if (realpath($filename) != "")
        $filename = realpath($filename);
    if (!file_exists($filename))
    {
        PrintMessage("'$filename' is missing or inaccessible by '" . get_current_user() . "'", false);
        return false;
    }
    elseif (!is_readable($filename))
    {
        PrintMessage("'$filename' found but is not readable by '" . get_current_user() . "'", false);
        return false;
    }
    else
        PrintMessage("'$filename' found and is readable by '" . get_current_user() . "'", true);
    return true;
}

答案 3 :(得分:0)

我用(IMO)的代码重新编写了一个更干净,更有效的代码:

<?php
$SID = "SOMETHING MYSTERIOUS";
setcookie("Student", $SID, time()+43200, "/");
$file = "/students/students.txt"; //is the full path correct?
$content = file_get_contents($file); //$content now contains /students/students.txt
$size = filesize($file); //do you still need this ?
echo $content;
file_put_contents($file, "\n".$SID, FILE_APPEND); //do you have write permissions ?

file_get_contents

  

file_get_contents() 是读取内容的首选方式   将文件转换为字符串。如果支持,它将使用内存映射技术   通过您的操作系统来提高性能。

file_put_contents

  

此功能与调用fopen()fwrite()和。{   fclose()先后将数据写入文件。如果文件名没有   存在,文件被创建。否则,现有文件是   覆盖,除非设置FILE_APPEND标志。

注意:

  1. 确定确定完整路径/students/students.txt正确即可。
  2. 检查您是否拥有read/write的{​​{1}}权限

  3. 详细了解linux file/folder permissions,或者,如果您无法访问shell,请how to change file or directory permissions via ftp

答案 4 :(得分:-1)

尝试这样做:

for (Component component : this.window.getComponents()) {
    if (component instanceof Oval) {
        component.setBackground(randomColor);
    }
}

并检查权限读取文件。