如何打开名称中包含特殊字符的文件

时间:2015-05-08 18:47:58

标签: php

在PHP中,如何打开名称中包含特殊字符的文件?

该名称类似于iPad | -5542fa5501f31.log

另一个论坛,我试过了:

$logid = str_replace(" ", "\x20", $_GET['logid']);
$logid = str_replace("|", "\x7C", $logid);

按摩这个名字,但这对我来说也不起作用。

我也已尝试过:

$dst_file = escapeshellarg($dst_file);

当然,只是直接开始:

$logid = $_GET['logid'];

初始文件是由Linux系统上的PHP脚本创建的。我很困惑为什么PHP脚本可以编写这样的文件名,但无法打开它进行阅读。

这是我目前的代码:

$logid = str_replace(" ", "\x20", $_GET['logid']);
$logid = str_replace("|", "\x7C", $logid);
$logdate = str_replace("-", "/", $_GET['date'])."/";
$dst_file = $uploads_dir.$logdate.$logid.'.log';

// read the data from the log file
echo "<pre>\n";
if (file_exists($dst_file)) {
    $file_handle = fopen($dst_file, "r");
    while (!feof($file_handle)) {
        $line = fgets($file_handle);
        if (strlen($line) < 3) continue;
        echo $line;
    }
    fclose($file_handle);
} else {
    echo $dst_file." does not exist\n";
}
echo "</pre>\n";

3 个答案:

答案 0 :(得分:0)

我发现的唯一一件事就是重命名文件然后打开。问题是没有PHP函数所以我尝试了系统命令。没有用。 #[derive(Debug,Copy,Clone,PartialEq)] enum Error { StartNotFound, NotANumber, } fn parse_it(haystack: &str) -> Result<u8, Error> { let needle = "HTTP/1."; let pt = try!(haystack.rfind(needle).ok_or(Error::StartNotFound)); let after_match = &haystack[(pt + needle.len())..]; let val = after_match.splitn(2, " ").next().unwrap(); val.parse().map_err(|_| Error::NotANumber) } fn main() { println!("{:?}", parse_it("HTTP/1.1 200\r\n")); println!("{:?}", parse_it("HTTP/1")); println!("{:?}", parse_it("HTTP/1.cow")); } 命令将重命名它。但过滤掉特殊字符&#34;会更好。保存文件时。

答案 1 :(得分:0)

另一个论坛上有人建议使用popen,所以我尝试了这个,并且它有效:

$logid = $_GET['logid'];
$logdate = str_replace("-", "/", $_GET['date'])."/";
$dst_file = escapeshellarg($uploads_dir.$logdate.$logid.'.log');
echo "<pre>\n";
$handle = popen("cat ".$dst_file, 'r');
while(!feof($handle)) {
    $line = fgets($handle);
    if (strlen($line) > 3) {
        echo $line;
    }
    ob_flush();
    flush();
}
pclose($handle);
echo "</pre>\n";

除了使用fopen / fclose(没有cat)之外,完全相同的代码将不起作用。

答案 2 :(得分:0)

我正在努力打开文件“2017-09-19_Comisión_Ambiental.jpg”,因为“ó”给了我这个错误:

  

file_get_contents ...无法打开流:...中没有这样的文件或目录

所以我在文件名上使用了 utf8_decode ,并且有效:

$data = file_get_contents( utf8_decode( $filename ) );

我知道这是一个古老的问题,甚至有一个公认的答案,我刚刚发布了它,因为它可能会对某人有所帮助。