我在同一台服务器上有两个域。 www.domain1.com& www.domain2.com。
在www.domain1.com中,有一个名为“图片”的文件夹。对于该文件夹,用户可以通过ID创建文件夹来上传他们的图片。 (www.domain1.com/Pictures/User_iD) 缩放是使用上传的图像同时创建的,并保存到动态创建的路径中。(www.domain1.com/Pictures/User_iD/thumbs)
在我们的系统中使用PHP脚本会发生这种情况。
所以我的问题是,我需要在www.domain2.com上显示那些用户上传的图片。 我使用以下代码来做到这一点,但它无法正常工作。
$image_path="http://www.domain1.com/Pictures/"."$user_id";
$thumb_path="http://www.domain1.com/Pictures/"."$user_id/"."thumbs";
$images = glob($image_path.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
获得这样的图像,
foreach ($images as $image) {
// Construct path to thumbnail
$thumbnail = $thumb_path .'/'. basename($image);
// Check if thumbnail exists
if (!file_exists($thumbnail)) {
continue; // skip this image
}
但是当我尝试这样做时,图片不会显示在www.domain2.com/user.php上。 如果我使用相同的代码来显示在同一个域中的图像,图像看起来很好。
希望我能正确解释这种情况。 请帮忙。
提前致谢
答案 0 :(得分:1)
Glob需要文件访问权限。但是因为它在另一个领域。它不会获得文件访问权限(它不应该)。即使它们位于同一台服务器上,它们也不应该因为很多原因而访问其他文件。
您可以做的是在domain1.com上编写一个小API,返回特定用户的图像列表。 然后,您可以使用isntance curl
访问该信息在domain1.com上存储图片:
<?php
//get the user id from the request
$user_id = $_GET['user_id'];
$pathToImageFolder = 'path_to_pictures' . $user_id ;
$images = glob($pathToImageFolder.'/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
//return a JSON array of images
print json_encode($images,true); #the true forces it to be an array
在domain2.com上:
<?php
//retrieve the pictures
$picturesJSON = file_get_contents('http://www.domain1.com/api/images.php?user_id=1');
//because our little API returns JSON data, we have to decode it first
$pictures = json_decode($picturesJSON);
// $pictures is now an array of pictures for the given 'user_id'
注意:
1)我在这里使用了file_get_contents而不是curl,因为它更容易使用。但并非所有主机都允许将file_get_contents用于其他域。如果他们不允许使用curl(互联网上有很多教程)
2)你应该检查$ user_id是否正确,甚至在请求中添加一个密钥以保持hack0rs不存在。例如:file_get_contents('http://www.domain1.com/api/images.pgp?user_id=1&secret=mySecret')
然后在domain1.com上进行简单检查以查看或秘密是否正确。