$search = 'C:\xampp1.7.7\htdocs\myproject\uploads/files/temp-ds-original';
$subject = 'C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original\32bd76470cff973ec873d43a4e84dd2f.jpg';
echo str_replace($search, '', $subject);
它只打印$subject
而不进行任何替换。我认为这可能是由于某些php版本问题,因为它是在PHP 5.3上,但后来我转移到php 7.2
但仍然是相同的结果。不知道这里出了什么问题?
是否与斜杠有关?
我上面有硬编码的字符串值,但在实际的脚本中,我使用$f->getRealPath()
来获取主题和搜索。 $f
是RecursiveIteratorIterator
修改
当我发布这个问题时,我可以发现问题,因为代码突出显示更容易看到斜杠不匹配 - 这意味着str_replace认为它是不匹配的。我想要实现的是得到相对路径,在上面的示例中是\32bd76470cff973ec873d43a4e84dd2f.jpg
...代码在第48行https://gist.github.com/bubba-h57/5117694
以上输出是在Windows机器上,但稍后我将在Linux服务器上使用此脚本。所以我需要考虑如何使路径保持一致,以便str_replace可以正确地进行替换。 $ search是我手动提供的东西,其中使用$ f-> getRealPath()自动检索$ subject。
更新和回答我的问题 我不相信这个问题与链接问题重复。人们很快就可以炫耀自己的技能而不必对细节给予足够的重视。 :)
原来这是一个简单的解决方案。我需要做的就是使用realpath(),即$search = realpath($search);
,它给出了正确的结果。
答案 0 :(得分:1)
这样可以帮助任何人 -
$search = 'C:\xampp1.7.7\htdocs\myproject\uploads/files/temp-ds-original';
$subject = 'C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original\32bd76470cff973ec873d43a4e84dd2f.jpg';
echo str_replace($search, '', $subject);
输出是:
C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original\32bd76470cff973ec873d43a4e84dd2f.jpg
但是我期待的是:
\32bd76470cff973ec873d43a4e84dd2f.jpg
我没有注意到斜杠不匹配,因此str_replace没有出错。重要的是,我并没有尝试仅从basename()
或其他方法获取文件名,因此我需要获得正确的斜杠。
我需要的只是使用PHP的realpath()即
$search = realpath($search);
就是这样。但是,您需要小心它只对我有用,因为我正在解析实际路径,即$ search中的文件夹存在于磁盘上。因此,如果您尝试解析虚拟或非真实目录的路径字符串,realpath()
将返回空或假。
答案 1 :(得分:0)
答案 2 :(得分:-1)
您可以始终使用相同的搜索
(例如:$search = 'C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original';
)
然后使用str_replace('/','\',$subject);
$search
您可以通过检查PHP常量PHP_OS(链接中的文档)
来完成此操作我希望能解决它。