fopen не разрешает создавать переменную для имени файла - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь создать файл и писать в него построчно. При попытке создать файл, используя имя файла из переменной, происходит сбой. но если я жестко закодирую имя файла, оно будет работать.

Отголоски:

Невозможно открыть / создать файл: CleanStatements \ Clean_IRS01HHTAX.TXT

Это работает:

if ($handle) {
        $cleanFileHandle = fopen( "CleanStatements\\Clean_IRS01HHTAX.TXT", "w") or die("Unable to open/create file: ".$this->CleanFilePath);
        while (($line = fgets($handle)) !== false) {
            fwrite($cleanFileHandle, $line);
        }
        fclose($cleanFileHandle);
        fclose($handle);
    } else {
        // error opening the file.
    }

Это не

if ($handle) {
        $cleanFileHandle = fopen( $this->CleanFilePath, "w") or die("Unable to open/create file: ".$this->CleanFilePath);
        while (($line = fgets($handle)) !== false) {
            fwrite($cleanFileHandle, $line);
        }
        fclose($cleanFileHandle);
        fclose($handle);
    } else {
        // error opening the file.
    }

Вот полный класс:

/**
 * Class StatementFile
*/
class StatementFile
{
var $Name;
var $FilePath;
var $Type;
var $CleanFileName;
var $CleanFilePath;

function __construct($filePath){
    $this->Name = basename($filePath).PHP_EOL;
    $this->FilePath = 'Statements\\'.$filePath;
    $this->Type = null;
    $this->CleanFileName = "Clean_".$this->Name;
    $this->CleanFilePath = "CleanStatements\\" . $this->CleanFileName;
}

function cleanStatement(){
    $handle = fopen($this->FilePath, "r");
    echo "Opening file: ".$this->FilePath ."<br/>";
    if ($handle) {
        $cleanFileHandle = fopen( $this->CleanFilePath, "w") or die("Unable to open/create file: ".$this->CleanFilePath);
        while (($line = fgets($handle)) !== false) {
            // process the line read.
            // clean line here
            fwrite($cleanFileHandle, $line);
        }
        fclose($cleanFileHandle);
        fclose($handle);
    } else {
        // error opening the file.
    }
}

1 Ответ

0 голосов
/ 06 ноября 2018

ТЛ; др

Удалить PHP_EOL из $this->Name


Это всего лишь предположение, но я бы поспорил, что PHP_EOL не содержит допустимых символов имени файла:

$this->Name = basename($filePath).PHP_EOL;
// which ultimate ends up concatenated in
$this->CleanFilePath

Если вам действительно нужно сохранить его в $this->name по любой причине, тогда примените trim()

$cleanFileHandle = fopen( trim( $this->CleanFilePath ), "w") or die("Unable to open/create file: ".trim( $this->CleanFilePath) );
...