gpt4 book ai didi

php - 使用PHP为一个类制作文件和目录

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:01 25 4
gpt4 key购买 nike

我已经构建了一个用于创建文件的类;

这是我的类(class):

<?php
class XLSX
{
/** @var resource */
private $handle;
/** @var array */
private $data;
/** @var array */
private $headings;
/** @var bool */
private $finished = true;
/** @var string */
private $filename;

/**
* Creates the class, must be done each time a file is written to as the handle is stored.
* @param string $filename The file to be written to, will create the file if it does not exist
*/
public function __construct($filename)
{
$this->MakeDir(dirname($filename));
$this->MakeFile($filename);
$this->finished = false;
}

/**
* Set the headers for the XSLX
* @param array $headers
* @return bool
*/
public function SetHeaders($headers)
{
return $this->AddToArray("headings", $headers);
}

/**
* Get the headers that were set, if not set return null.
* @return array|null
*/
public function GetHeaders()
{
return !empty($this->headings) ? $this->headings : null;
}

/**
* Set the data for the XSLX
* @param array $headers
* @return bool
*/
public function SetData($data)
{
return $this->AddToArray("data", $data);
}

/**
* Get the data that was set, if not set return null.
* @return array|null
*/
public function GetData()
{
return !empty($this->data) ? $this->data : null;
}

/**
* Get the filename
* @return string
*/
public function GetFilename()
{
return $this->filename;
}

/**
* Write the data that is needed for the file to the file
* @return bool
*/
public function Write()
{
if (!$this->finished && isset($this->handle))
{
if ($this->GetHeaders() == null || $this->GetData() == null)
{
return false;
}
foreach ($this->GetHeaders() as $header)
{
fwrite($this->handle, $header . "\t");
}
fwrite($this->handle, "\n");
foreach ($this->GetData() as $data)
{
if (is_array($data))
{
foreach ($data as $d)
{
fwrite($this->handle, $d . "\t");
}
fwrite($this->handle, "\n");
}
else
{
fwrite($this->handle, $data . "\t");
}
}
}
return false;
}

/**
* Set the handle and all data back to default, ready to recall a new instance.
* @return void
*/
public function Finish()
{
fclose($this->handle);
$this->handle = null;
$this->data = null;
$this->headings = null;
$this->finished = true;
$this->filename = null;
}

/**
* Count the amount of working days in a month
* @param integer $year
* @param integer $month
* @return double|integer
*/
public function CountDays($year, $month)
{
$count = 0;
$counter = mktime(0, 0, 0, $month, 1, $year);
while (date("n", $counter) == $month)
{
if (in_array(date("w", $counter), array(0, 6)) == false)
{
$count++;
}
$counter = strtotime("+1 day", $counter);
}
return $count;
}

/**
* Makes a directory
* @param string $dirname
*/
private function MakeDir($dirname)
{
if (!is_dir($dirname))
{
@mkdir($dirname, 777, true) ?: die("Failed to create the required directory.");
}
}

/**
* Creates a file to be used
* @param string $filename
*/
private function MakeFile($filename)
{
if (file_exists($filename))
{
for ($i = 1; $i <= 200; $i++)
{
$fname = basename($filename);
$base = str_replace($fname, "", $filename);
$explded_base_name = explode(".", $fname);
if (!file_exists("{$base}{$explded_base_name[0]}_{$i}.{$explded_base_name[1]}"))
{
$this->handle = fopen("{$base}{$explded_base_name[0]}_{$i}.{$explded_base_name[1]}", "w");
$this->filename = $base . str_replace(" ", "%20", "{$explded_base_name[0]}_{$i}.{$explded_base_name[1]}");
break;
}
}
}
else
{
$this->handle = fopen($filename, "w");
$this->filename = $filename;
}
}

/**
* Add items to an array
* @param string $arrayName
* @param mixed $values
* @return bool
*/
private function AddToArray($arrayName, $values)
{
if (!$this->finished)
{
foreach($values as $val)
{
$this->{$arrayName}[] = $val;
}
}
return !empty($this->{$arrayName}) ? true : false;
}
}
?>

现在,除了一个症结点外,这一切都很好;在我的服务器上创建文件名的方式。

为此,我将 /var/www/vhosts/mysite.co.uk/_exports/payslips/ 作为我尝试写入的目录。正如您在我的代码中看到的那样,我有这一行:

$fname = explode(".", $filename);

但是,这会在重建文件名时引起问题,例如,我的文件名是:

/var/www/vhosts/mysite.co
// Should be:
/var/www/vhosts/mysite.co.uk/_exports/payslips/02 Dec 2015/{username}.xls

__construct 方法中为此重建文件名的最佳方法是什么?

我是这样使用的:

$fname = "/var/www/vhosts/mysite.co.uk/_exports/payslips/" . date("j M Y") . "/" . $_SESSION['loginUsername'] . ".xls";
$xlsx = new XLSX($fname);

最佳答案

您可以查看 basename该函数将只返回文件名,然后您只能使用它。

关于php - 使用PHP为一个类制作文件和目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34041072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com