[請益] 外連圖片存至資料庫如何取出檔名(已解決)

看板PHP作者 (就是喜歡找「茶」)時間15年前 (2010/10/19 16:40), 編輯推噓1(1030)
留言31則, 5人參與, 最新討論串1/1
最近在作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)

10/19 17:32, , 1F
其實按上一篇的L大建議的作法, 將遠端的圖檔抓回來, 再存
10/19 17:32, 1F

10/19 17:33, , 2F
在本地端即可滿足你的需求. 既然將圖檔都存在本地端了,檔
10/19 17:33, 2F

10/19 17:33, , 3F
名就隨便取囉.
10/19 17:33, 3F

10/19 17:34, , 4F
至於上面原文提到, 存入資料庫的一長串 code, 那是圖片本
10/19 17:34, 4F

10/19 17:34, , 5F
身(binary), 跟檔名無關 ~
10/19 17:34, 5F

10/19 18:03, , 6F
把抓圖另存新檔, 產生FPDF. 兩件事情分開來看...
10/19 18:03, 6F

10/19 18:04, , 7F
如果你一直搞不清楚這兩件事情是不一樣的兩件事情..
10/19 18:04, 7F

10/19 18:04, , 8F
一直混在一起, fpdf 加入圖片應該是很難弄的好...
10/19 18:04, 8F

10/19 18:10, , 9F
我知道是兩件事情阿~ 現在就是在研究圖片抓到本機並存取
10/19 18:10, 9F

10/19 18:11, , 10F
然後再取得資料庫中的圖片檔案名稱
10/19 18:11, 10F

10/19 18:13, , 11F
問題是不知道把圖片怎樣下載並存到資料庫
10/19 18:13, 11F

10/19 18:14, , 12F
編譯圖片存起來就只是存資訊,並沒有存圖進去~
10/19 18:14, 12F

10/19 18:15, , 13F
根本不用存到資料庫阿...
10/19 18:15, 13F

10/19 18:15, , 14F
你只是要抓下來塞去 fpdf 用, 塞去資料庫幹麼?...
10/19 18:15, 14F

10/19 18:16, , 15F
fpdf 要得是一個檔案, 你直接存下來丟在 tmp 暫存就好了..
10/19 18:16, 15F

10/19 18:16, , 16F
那個"假會"的存入資料庫幹麼?...
10/19 18:16, 16F
當然~存到暫存檔直接使用比較省空間阿! 不過重點是我不知道怎樣把抓到那個檔案放到暫存檔 並取得他在暫存檔中的檔案名稱 我只知道用 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)

10/19 18:25, , 17F
寫一個 function getRemoteImageToTime(){} 回傳暫存位置.
10/19 18:25, 17F

10/19 18:25, , 18F
不就可以了嗎?... 帶入的參數就用遠端網址...
10/19 18:25, 18F

10/19 18:26, , 19F
回傳就是暫存檔案的檔名位置, 這樣直接塞給fpdf就好了.
10/19 18:26, 19F

10/19 18:27, , 20F
getRemoteImageToTemp(); 上面手誤.
10/19 18:27, 20F

10/19 18:37, , 21F
你把取得的資料file_put_contents 檔名你自己取
10/19 18:37, 21F

10/19 18:37, , 22F
不就好了= =注意路徑和權限就是了
10/19 18:37, 22F

10/19 18:37, , 23F
php manual多看 尤其是下面的註解和討論...gl
10/19 18:37, 23F

10/19 18:40, , 24F
move_uploaded_file 這個函式應該是你想要的
10/19 18:40, 24F

10/19 18:52, , 25F
10/19 18:52, 25F

10/19 18:53, , 26F
不加上錯誤控制,不用超過10行....
10/19 18:53, 26F

10/19 18:53, , 27F
誤會了,我以為是上傳檔案...應該是用 file_put_contents
10/19 18:53, 27F

10/19 18:55, , 28F
網路上抄半天不如上php.net看手冊來得有用
10/19 18:55, 28F
參照 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)

10/20 23:49, , 29F
存到/tmp的圖檔沒給副檔名,fopen當然抓不到picXXX.png囉
10/20 23:49, 29F

10/21 13:10, , 30F
沒事幹麼給他多加上那個附檔名?. fpdf沒附檔名不知道是什?
10/21 13:10, 30F

10/21 14:24, , 31F
....多作多錯 少作少錯 先知道自己要作什麼再作吧
10/21 14:24, 31F
總算是完成了 原來是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)
文章代碼(AID): #1ClLcPY4 (PHP)
文章代碼(AID): #1ClLcPY4 (PHP)