<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[php “mkdir -p” 递归创建]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Mon, 25 Nov 2013 03:28:38 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	For some reason however I expected it to behave like `mkdir -p` on the command line which succeeds if the directory already exists.<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
/**
 * Makes directory and returns BOOL(TRUE) if exists OR made.
 *
 * @param&nbsp;&nbsp;$path Path name
 * @return bool
 */
function rmkdir($path, $mode = 0755) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;$path = rtrim(preg_replace(array(&quot;/&#92;&#92;&#92;&#92;/&quot;, &quot;/&#92;/&#123;2,&#125;/&quot;), &quot;/&quot;, $path), &quot;/&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;$e = explode(&quot;/&quot;, ltrim($path, &quot;/&quot;));
&nbsp;&nbsp;&nbsp;&nbsp;if(substr($path, 0, 1) == &quot;/&quot;) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$e[0] = &quot;/&quot;.$e[0];
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;$c = count($e);
&nbsp;&nbsp;&nbsp;&nbsp;$cp = $e[0];
&nbsp;&nbsp;&nbsp;&nbsp;for($i = 1; $i &lt; $c; $i++) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!is_dir($cp) &amp;&amp; !@mkdir($cp, $mode)) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cp .= &quot;/&quot;.$e[$i];
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;return @mkdir($path, $mode);
&#125;

?&gt;
</textarea><br/><br/><textarea name="code" class="php" rows="15" cols="100">
Somehow the recursive version of mkdir didn&#039;t work for me on Mac and the workaraounds listed below alsow didn&#039;t work for me, so heres my solution:

&lt;?php
function mkdir_r($dirName, $rights=0777)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;$dirs = explode(&#039;/&#039;, $dirName);
&nbsp;&nbsp;&nbsp;&nbsp;$dir=&#039;&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;foreach ($dirs as $part) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dir.=$part.&#039;/&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!is_dir($dir) &amp;&amp; strlen($dir)&gt;0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mkdir($dir, $rights);
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&#125;
?&gt;

Tested and works ;)
</textarea><br/><br/>上面来自PHP手册老外的回复：<br/>http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7216695c7150888c40e8e3b081d0035bda66f780d5094992d215af2154bea87692b615860a09bbfca109fafd7756fde28762a5e9141638c40f9900632c151875a9fb81897f8&amp;p=882a9543d2b112a05afcc665540883&amp;newp=8b2a9712a49111a058eb9029164ccb231610db2151d1d11128a6c1&amp;user=baidu&amp;fm=sc&amp;query=PHP+mkdir+-P&amp;qid=&amp;p1=1<br/><br/>下面来自网友没实践：<br/>http://hi.baidu.com/hevensun/item/d28a0c08c68d98e0ff240d85<br/><br/><textarea name="code" class="php" rows="15" cols="100">
function mkdirs($dir)

&nbsp;&nbsp;&nbsp;&nbsp;&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!is_dir($dir))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!mkdirs(dirname($dir)))&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!mkdir($dir,0777))&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;

&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;function rmdirs($dir)

&nbsp;&nbsp;&nbsp;&nbsp;&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$d = dir($dir);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (false !== ($child = $d-&gt;read()))&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($child != &#039;.&#039; &amp;&amp; $child != &#039;..&#039;)&#123;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(is_dir($dir.&#039;/&#039;.$child))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rmdirs($dir.&#039;/&#039;.$child);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else unlink($dir.&#039;/&#039;.$child);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$d-&gt;close();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rmdir($dir);

&nbsp;&nbsp;&nbsp;&nbsp;&#125;

</textarea>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] php “mkdir -p” 递归创建]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>