我有一个非常奇怪的问题,试图在wordpress应用程序中在php中执行一个简单的str_replace。
我正在尝试使用wordpress函数创建图像路径以获取站点路径和资源路径。以下是我尝试的3种方法,所有方法都给出了我不理解的结果。
原始方法:(这适用于我自己的本地主机,但是在prod中,管理员端为前端提供了不同的$ fullpath)
$site_url = get_site_url();
$homepath = get_home_path();
$filepath = str_replace($site_url.'/', '', $attachment->image_src_large[0]);
$fullpath = $homepath.$filepath;
前端的输出是
的$ fullpathstring(114) "/usr/www/users/currentuser/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
但是当在Admin End中时(注意双正斜杠)
string(114) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
我注意到在生产服务器$attachment->image_src_large[0]
上没有包含在开发服务器上的域。因此,考虑到这一点,并尝试解决Admin End上的双斜杠,我尝试了许多方法,如下所述 - 这是事情开始有点怪异的时候:
2
$site_url = get_site_url();
$homepath = get_home_path();
$filepath = $attachment->image_src_large[0];
$fullpath = str_replace("//", "/", $homepath.$filepath);
//var_dumps Give
//FRONT END
//$attachment->image_src_large[0] - string(89) "/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
//$filepath - string(114) "/usr/www/users/currentuser/https:/www.currentdomain.co.za/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
//ADMIN (Gave http instead of https)
//$attachment->image_src_large[0] - string(84) "/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
//$filepath - string(109) "/usr/www/users/currentuser/http:/currentdomain.co.za/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
$site_url = get_site_url();
$homepath = get_home_path();
$filepath = str_replace('/', '', $attachment->image_src_large[0]);
$fullpath = $homepath.$filepath;
//var_dumps Give
//$attachment->image_src_large[0] - string(51) "/wp-content/uploads/2017/10/image1-1024x684.jpg"
//$filepath - NULL
3
$site_url = get_site_url();
$homepath = get_home_path();
$filepath = $attachment->image_src_large[0];
$fullpath = $homepath.$filepath;
$finalpath = str_replace("//", "/", $fullpath);
$fullpath - string(115) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image-1-1024x684.jpg"
$finalpath - string(114) "/usr/www/users/currentuser/https:/www.currentdomain.co.za/wp-content/uploads/2017/10/image-1-1024x684.jpg"
这里奇怪的是$ finalpath字符串vs $ fullpath sting的大小,它看起来像str_replace工作但是当php读取字符串时它取代/与域
4。 试图逃避要插入的正斜杠
...
$finalpath = str_replace("//", "\/", $fullpath);
//$fullpath - string(110) "/usr/www/users/currentuser//wp-content/uploads/2017/10/image-1-1024x684.jpg"
//$finalpath - string(110) "/usr/www/users/currentuser/http:\/currentdomain.co.za/wp-content/uploads/2017/10/image-1-1024x684.jpg"
我正在寻找的输出是这个 - string(114) "/usr/www/users/currentuser/wp-content/uploads/2017/10/image1-2962-1024x684.jpg"
我无法解决这个问题!任何人都能提供帮助,我将不胜感激!
答案 0 :(得分:0)
你已经有了
$homepath = '/usr/www/users/currentuser/'
$filepath = /wp-content/uploads/2017/10/image1-2962-1024x684.jpg'
(来自$attachment->image_src_large[0]
)
$fullpath = substr($homepath, 0, strlen($homepath)-1) . $filepath;
$fullpath = str_replace('https://currentdomain.co.za/', '', $fullpath);
$fullpath = str_replace('//', '/', $fullpath);
通过使用substr
函数,/
中的最后一个$homepath
被删除(此代码从字符串的开头读取,直到最后一个字符为{{1} }})。这可能是可选的,因为浏览器/网络服务器应自动删除额外的/
。
接下来,用空字符串替换域名,并用空字符串替换/
,特别是按此顺序。
我希望这能解决你的问题
答案 1 :(得分:0)
我找到了解决方案!并不是说它解释了我所看到的一些奇怪的str_replace活动,所以如果有人能解释一下,请做。
但要解决我遇到的原始问题 - 行
$filepath = str_replace($site_url.'/', '', $attachment->image_src_large[0]);
仅对 后退或前端产生影响,但不是,因为$attachment->image_src_large[0]
每个都有所不同。在前端我会得到https://...
但是在后端,无论出于何种原因,我都会得到http://...
。
所以我将$site_url = get_site_url();
扩展为:
$site_url = get_site_url();
if (strpos($site_url, 'https') !== false){
$ssl_site_url = $site_url;
$plain_site_url = str_replace("https", "http", $site_url);
} else {
$plain_site_url = $site_url;
$ssl_site_url = str_replace("http", "https", $site_url);
}
然后为两个字符串做了str_replace()
。可能有点矫枉过正,但无论协议$attachment->image_src_large[0]
是什么原因,它都会有效。