【问题标题】:File::get() for Laravel returns null for existing fileLaravel 的 File::get() 为现有文件返回 null
【发布时间】:2013-07-16 22:32:50
【问题描述】:

使用 Laravel 框架,我使用File::get() 方法访问public/css 目录中的CSS文件,对于既存在又具有内容的文件返回null:

PHP 代码是:

private static $css_files = array(
                        "main"   => 'css/main.css',
                        "layout" => 'css/layout.css'
                        );

public static function get_css ($vars) {

    $file     = self::$css_files[$vars["file_name"]];
    $contents = File::get(path('public').$file, "File Not Found ($file)");

    return json_encode(array("file" => path('public').$file,
                         "contents" => $contents));

}

返回我的网页(从 Chrome 中的 js 控制台):

Object {file: "/var/www/sites/public/css/main.css", contents: null} 

文件存在:

user@pc:~$ ls /var/www/sites/public/css/main.css
/var/www/sites/public/css/main.css

有内容:

user@pc:~$ wc -l /var/www/sites/public/css/main.css
441 /var/www/sites/public/css/main.css

并且该方法不会触发File::get() 中的$default 参数,如果文件不存在(使用其他有效和无效名称进行测试),它应该触发,因此它肯定找到了文件。

我已经在同一个 PHP 方法 (get_css())、其他目标目录和同一目录中尝试了其他文件,它返回这些文件的内容没有问题。

CSS文件的权限是ok的:

user@pc:~$ ls -hal /var/www/sites/public/css/main.css 
-rw-r--r-- 1 www-data root 6.5K May 25 14:01 /var/www/sites/public/css/main.css

一个单独的PHP脚本,从命令行运行返回内容:

<?php    
  echo file_get_contents("/var/www/sites/public/css/main.css");
?>

这是main.css的前几行

user@pc:~$ head /var/www/sites/public/css/main.css

/* Estilos principais*/

    body{
    background-color:#c5c5c5;
    font-family:sans-serif;
    font-size:1.5em;
    color:#999;
    text-align:center;
    margin:0;

这是一个错误吗?它不喜欢 CSS 文件的内容是否有任何原因(我现在看不到)?

【问题讨论】:

  • File::get() 是一个非常简单的 1 行函数...return (file_exists($path)) ? file_get_contents($path) : value($default); 你能确认 a) file_exists() 单独工作,b) json_encode() 与其他内容一起工作吗?
  • 这就是我不明白的... json_encode() 与其他内容一起使用(甚至来自同一目录中另一个 css 文件的内容),file_exists() 也可以正常工作。该函数正在返回它认为是文件的内容。我将第二个参数传递给get() 方法,所以它不应该只返回null。我现在认为问题出在file_get_contents(),但不知道为什么!

标签: php laravel laravel-3


【解决方案1】:

知道了,其中两个文件不是 utf-8,json_encode() 卡在非 utf-8 内容上,然后返回 null,问题不在 File::get(),而是在 @987654324 @。

结案!

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 2021-08-12
    • 2018-04-21
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多