作者teaRsis (就是喜欢找「茶」)
看板PHP
标题[请益] 外连图片存至资料库如何取出档名
时间Tue Oct 19 16:40:54 2010
最近在作FPDF崁入image的语法
不过版上大大有提到该语法是要提供图片档名
先存至资料库在讨论後面的东东
目前使用有把图片存到资料库
语法如下:
=================语法开始=================
<?
header("Content-type: image/png");
$url="
http://chart.apis.google.com/chart?cht=gom&chd=t:100&chl=0&chs=340x230";
$img_string = base64_encode(file_get_contents($url));
$link = @mysqli_connect("localhost","admin","1234") or die("MYSQL");
mysqli_select_db($link,"data");
if( !$link)
{
echo""."mysqli_connect_errno()"."<br>"."mysqli_connect_error()"."<br>";
exit();
}
else
{
$sql ="INSERT INTO Images (code) values ('".$img_string."')";
mysqli_query($link, "SET CHARACTER SET UTF8");
mysqli_query($link, "SET collation_connection= 'utf8_general_ci'");
if( mysqli_query($link, $sql) )
{
echo"纪录成功";
}
else
{
die("纪录失败");
echo mysqli_error($link);
}
mysqli_close($link);
}
?>
=================语法结束=================
资料表结构如下:
http://img196.imageshack.us/img196/1128/dataab.jpg
然後我把资料库中一长串code
在另一个PHP中重新呼叫出来
=================语法开始=================
<?
$link = @mysqli_connect("localhost","admin","1234") or die("MYSQL");
mysqli_select_db($link,"data");
if( !$link)
{
echo""."mysqli_connect_errno()"."<br>"."mysqli_connect_error()"."<br>";
exit();
}
else
{
$sql ="SELECT * FROM Images ORDER BY PicNum DESC LIMIT 1";
mysqli_query($link, "SET CHARACTER SET UTF8");
mysqli_query($link, "SET collation_connection= 'utf8_general_ci'");
$result = mysqli_query($link, $sql) ;
while ($row = mysqli_fetch_assoc($result))
{
$img_string = $row['code'];
$img = base64_decode($img_string);
header("Content-type: image/png");
header("Content-length: " . strlen($img));
print $img;
}
}
=================语法结束=================
图片有成功print出来
不过在FPDF中
显示图片的语法是
$pdf->Image(xxxxx.png,5,4,5,0,'png');
﹌﹌﹌﹌﹌
↑
刚刚存到资料库中的语法并没有办法叫出图片的档案名称
因为存到资料库中的只是一长串被编译过的code
请问外连图片存至资料库如何取出档名??
麻烦指点一下!!谢谢 <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.134.139
※ 编辑: teaRsis 来自: 140.116.134.139 (10/19 16:42)
※ 编辑: teaRsis 来自: 140.116.134.139 (10/19 16:44)
1F:推 ming220:其实按上一篇的L大建议的作法, 将远端的图档抓回来, 再存 10/19 17:32
2F:→ ming220:在本地端即可满足你的需求. 既然将图档都存在本地端了,档 10/19 17:33
3F:→ ming220:名就随便取罗. 10/19 17:33
4F:→ ming220:至於上面原文提到, 存入资料库的一长串 code, 那是图片本 10/19 17:34
5F:→ ming220:身(binary), 跟档名无关 ~ 10/19 17:34
6F:→ kylekai:把抓图另存新档, 产生FPDF. 两件事情分开来看... 10/19 18:03
7F:→ kylekai:如果你一直搞不清楚这两件事情是不一样的两件事情.. 10/19 18:04
8F:→ kylekai:一直混在一起, fpdf 加入图片应该是很难弄的好... 10/19 18:04
9F:→ teaRsis:我知道是两件事情阿~ 现在就是在研究图片抓到本机并存取 10/19 18:10
10F:→ teaRsis:然後再取得资料库中的图片档案名称 10/19 18:11
11F:→ teaRsis:问题是不知道把图片怎样下载并存到资料库 10/19 18:13
12F:→ teaRsis:编译图片存起来就只是存资讯,并没有存图进去~ 10/19 18:14
13F:→ kylekai:根本不用存到资料库阿... 10/19 18:15
14F:→ kylekai:你只是要抓下来塞去 fpdf 用, 塞去资料库干麽?... 10/19 18:15
15F:→ kylekai:fpdf 要得是一个档案, 你直接存下来丢在 tmp 暂存就好了.. 10/19 18:16
16F:→ kylekai:那个"假会"的存入资料库干麽?... 10/19 18:16
当然~存到暂存档直接使用比较省空间阿!
不过重点是我不知道怎样把抓到那个档案放到暂存档
并取得他在暂存档中的档案名称
我只知道用 form 上传档案後可以自动取得暂存档的相关资讯
http://forum.twbts.com/thread-581-1-1.html
因为不知道到怎样使用暂存
才想说使用各位高手建议的方法
使用file_get_contents去抓资料
也的确「抓到他」了~但不知道是抓到哪去?
後来上网查了wget的方法
在命令列下:
$ wget "chart.apis.google.com/chart?cht=gom&chd=t:100&chl=0&chs=340x230" -O
f1.png
可以取得一个f1.png的档案在那个资料夹
不过把那个指令放到PHP中就无效化
<?
exec("wget chart.apis.google.com/chart?cht=gom&chd=t:100&chl=0&chs=340x230 -O
f2.png");
?>
总之现在就是暂存档也好
强制抓下来也好
希望能够「抓到他」并取得档名 (/‵Д′)/~ ╧╧
唉~这部分真的不懂~上网查了很多资料乱拼出来还是不行
希望高手们再给些教学~谢谢!
※ 编辑: teaRsis 来自: 140.116.134.139 (10/19 18:36)
17F:→ kylekai:写一个 function getRemoteImageToTime(){} 回传暂存位置. 10/19 18:25
18F:→ kylekai:不就可以了吗?... 带入的参数就用远端网址... 10/19 18:25
19F:→ kylekai:回传就是暂存档案的档名位置, 这样直接塞给fpdf就好了. 10/19 18:26
20F:→ kylekai:getRemoteImageToTemp(); 上面手误. 10/19 18:27
21F:→ LewisHamiltn:你把取得的资料file_put_contents 档名你自己取 10/19 18:37
22F:→ LewisHamiltn:不就好了= =注意路径和权限就是了 10/19 18:37
23F:→ LewisHamiltn:php manual多看 尤其是下面的注解和讨论...gl 10/19 18:37
24F:→ jaceju:move_uploaded_file 这个函式应该是你想要的 10/19 18:40
26F:→ kylekai:不加上错误控制,不用超过10行.... 10/19 18:53
27F:→ jaceju:误会了,我以为是上传档案...应该是用 file_put_contents 10/19 18:53
28F:→ ming220:网路上抄半天不如上php.net看手册来得有用 10/19 18:55
参照 kylekai 的教学
写了下述程式码:
$url =
"
http://chart.apis.google.com/chart?cht=gom&chd=t:100&chl=0&chs=340x230";
$fp = file_get_contents($url);
$tmp = tempnam('/tmp/','pic');
file_put_contents($tmp,$fp);
$img = $tmp.".png";
有顺利存到tmp中-----> /tmp/picXxEzN1
然後放到FPDF中
$pdf->Image($img,4.5,4,19.5,0,'png');
网页却显示错误讯息
Warning: fopen(/tmp/picXxEzN1.png) [function.fopen]: failed to open stream:
No such file or directory in
/home/admin/public_html/project/test/fpdi134/fpdf.php on line 1440
FPDF error: Can't open image file: /tmp/picXxEzN1.png
资料库是这样...
/tmp/picXxEzN1
/home/admin/project/test/printpdf.php
请问要如何取出「完整的」tmp 路径来使用呢? (目前研究 sys_get_temp_dir 中...)
※ 编辑: teaRsis 来自: 140.116.42.196 (10/20 23:27)
29F:→ ming220:存到/tmp的图档没给副档名,fopen当然抓不到picXXX.png罗 10/20 23:49
30F:→ kylekai:没事干麽给他多加上那个附档名?. fpdf没附档名不知道是什? 10/21 13:10
31F:→ LewisHamiltn:....多作多错 少作少错 先知道自己要作什麽再作吧 10/21 14:24
总算是完成了
原来是tmpnam指定路径错误所以才存不进去想要的路径
$url="
http://chart.apis.google.com/chart?cht=gom&chd=t:10&chl=240&chs=340x230";
$fp = file_get_contents($url);
$tmp1 = tempnam('/home/admin/public_html/project/sfs30/tmp1/','pic');
file_put_contents($tmp1,$fp);
$tt = substr($tmp1,-9); //取出网页中图片档案的字串
$pic11 = "/tmp1/".$tt;
至於副档名
$pdf->Image($pic11,140,25,60,40,'png'); //在这边指定即可
谢谢以上帮忙的各位大大
自己有很多不了解部分谢谢指导
我以後会多研究manual的 ( ̄▽ ̄#)﹏﹏
有协助的各位每人200p (税前)
ming220
kylekai
LewisHamiltn
谢谢!!!
※ 编辑: teaRsis 来自: 140.116.42.196 (10/21 15:22)
※ 编辑: teaRsis 来自: 140.116.42.196 (10/21 15:24)