我目前通过工作存折的部分iOS6的由团队通过教程在raywenderlich.com,并且我得到我的PHP以下错误:
警告:mkdir() [function.mkdir]:文件存在于第 26 行的 /xxx/xxx/xxx/xxx/Pass.php
警告:mkdir() [function.mkdir]:文件存在于第 26 行的 /xxx/xxx/xxx/xxx/Pass.php
警告:rmdir(/tmp/50c8d11c60538/..) [function.rmdir]:第 54 行 /xxx/xxx/xxx/xxx/Pass.php 中的目录不为空
我班上的代码如下:
class Pass
{
private $workFolder = null;
private $ID = null;
var $content = null;
var $passBundleFile = null;
private function copySourceFolderFilesToWorkFolder($path)
{
// recurse over the contents and copy files
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $name => $fileObject)
{
if (is_file($name) && substr($fileObject->getFileName(), 0, 1) != ".")
{
copy($name, $this->workFolder."/".str_replace($path."/", "",$name));
}
else if (is_dir($name))
{
mkdir($this->workFolder."/".str_replace($path."/", "",$name));
}
}
}
// delete all auto-generated files in the temp folder
function cleanup()
{
// recurse over conrents and delete files
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($this->workFolder),
RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $name => $fileObject)
{
if (is_file($name))
{
unlink($name);
}
else if (is_dir($name))
{
rmdir($name);
}
}
rmdir($this->workFolder);
}
function __construct($path)
{
assert(file_exists($path."/pass.json"));
$this->ID = uniqid();
$this->workFolder = sys_get_temp_dir()."/".$this->ID;
mkdir($this->workFolder);
assert(file_exists($this->workFolder));
$this->copySourceFolderFilesToWorkFolder($path);
$this->readPassFromJSONFile($this->workFolder."/pass.json");
}
// cleanup the temp folder on object destruction
function __destruct()
{
$this->cleanup();
}
}
Run Code Online (Sandbox Code Playgroud)
并且正在实例化一个实例:
$coupon = new Pass("pass/source");
Run Code Online (Sandbox Code Playgroud)
我曾尝试上传随本书提供的示例代码并得到相同的错误。
我已经在相关论坛上发布了这个,但是还没有人回复,我想在继续之前深入了解这个问题。
谢谢,尼克
您的第一个 if 测试是否为“.” 和 '..' 但它将是错误的并转到其他。和 '。' 和 '..' 是目录。因此它尝试创建一个名为“.”的目录,该目录已经存在。
if (is_file($name) && substr($fileObject->getFileName(), 0, 1) != ".")
{
copy($name, $this->workFolder."/".str_replace($path."/", "",$name));
}
else if (is_dir($name))
{
mkdir($this->workFolder."/".str_replace($path."/", "",$name));
}
Run Code Online (Sandbox Code Playgroud)
通过这样做修复:
if($name == '.' || $name == '..'){// ignore '.' and '..', but not hidden files
continue;
}
if (is_file($name))
{
copy($name, $this->workFolder."/".str_replace($path."/", "",$name));
}
else if (is_dir($name))
{
mkdir($this->workFolder."/".str_replace($path."/", "",$name));
}
Run Code Online (Sandbox Code Playgroud)