עבור לתוכן

PHP - הצגת תמונה בשם שונה מהמקור (קצת דחוף)

Featured Replies

פורסם

שלום לכולם,

עד כה עזרתם לי יפה פה בפורום לפרוייקט אותו אני מרים, אשמח אם תוכלו לעזור לי גם בעניין זה.

אני רוצה להחזיר תמונה מסויימת ובכל פעם בשם אחר.

ז"א : אם שם התמונה היא X.gif אז פעם בשם 1.gif ועם שניה כ 2.gif.

ה PHP שלי מחזיר ערכים לפי שאילתות הנשלחות אליו, כעת הייתי רוצה להצמיד לערכים אלו תמונה, הכי נוח יהיה על ידי שינוי שם התמונה לערך המבוקש.

סיבת השאלה:

ליתר העמקה בשאלה שלי אציין כי אני מבצע סימולציה על שרת פרוסקי squid, כאשר האובקייטים אותם אני מחזיר הם בעצם ערכים משדות ממסד נתונים mysql, כאשר ה squid אינו מבצע caching לדפים המוחזרים כאשר מופיעים בהם רק הערכים המוחזרים.

לעומת זאת אם אני מחזיר תמונה אז כן מתבצע caching לה.

אם התומנה תוחזר עם שם האובייקטים אותם ביקשתי אז זה יספיק לצרכי הסימולציה המבוקשת.

פורסם

שים את הקוד הבא איפה שאתה רוצה שהתמונה תופיע:

<? 
function make_seed()
{
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}

mt_srand(make_seed());
$randval = mt_rand();

copy("bla.jpg", $randval.".jpg");
echo '<img src="'.$randval.'jpg">';
setcookie("name", $randval);
?>

כמובן ששיטה זו תגרום לעומס על השרת, לכן פתרתי זאת על ידי מעט :JavaScript

<body onLoad='frames["end"].location.href="delete.php"' onUnLoad='frames["end"].location.href="delete.php"'>

רק אל תשכח לשים iframe בעלת ערכי id ו-name בשם "end".

בקובץ delete.php פשוט תשים:

<?
delete($_COOKIE["name"]);
?>

בהצלחה

פורסם
  • מחבר

תודה,

אנסה זאת ביום ראשון :xyxthumbs:

פורסם
  • מחבר

זה קצת דחוף אודה לתגובות ...

טוב,

בעקרון אני חלש ב PHP (לומד תוך כדי יישום הפרויקט), אני צריך עזרה יותר ממשית, לכן אפרט בדיוק מה יש לי, כי לא ממש הצלחתי להיעזר בקוד שניתן לי.

יש לי קובץ :

//opt/lampp/htdocs/mamimo.jpg

יש לי את השם הרצוי במשתנה:

$row->req_ObjectId

ז"א אני רוצה שה PHP ישלח/יציג את במקום mamimo.jpg את הערך שבמשתנה כשם התמונה :

$row->req_ObjectId.jpg

כיצד אני קורא את קובץ התמונה ל PHP, ניסיתי לפי הדוגמה למעלה אך קיבלתי ERROR עד שהשתמשתי ב ob_start אך עדיין זה נראה כאילו שום דבר לא קורה.

תודה רבה,

פורסם

הקובץ שמראה את התמונה:

<body onLoad='frames["end"].location.href="delete.php"' onUnLoad='frames["end"].location.href="delete.php"'>
<ifrmae width="1" height="1" name="endd" src="bla.html">
<?
copy("bla.jpg", $row.".jpg");
echo '<img src="'.$row.'.jpg">';
setcookie("name", $row);
?>
</body>

delete.php:

<?
unlink($_COOKIE["name"].".jpg");
?>

הקוד עקרונית עובד, אבל החלק של ה-JavaScript מקרטע. :-X

אתה יכול לראות את זה ע"י כניסה ידנית ל-delete.php לאחר שהדף סיים לטעון.

פורסם

יש לי פתרון טיפה טוב יותר(לדעתי)


קובץ:pic.php
<?php
header('Content-Type: image/jpeg');
header('Content-Disposition: attachment; filename="'.$_GET['name'].'.jpg"');
readfile('//opt/lampp/htdocs/mamimo.jpg');
?>
איפה שאתה רוצה את התמונה:
<img src="pic.php?name=<?php echo $row->req_Objectid; ?>" />

פורסם
  • מחבר

טוב אני מבולבל לחלוטין, מה שיש לי כרגע זה קובץ PHP יחיד -> test.php, אשמח אם תעזור איך להכניס את התמונה פנימה

<?php

echo $_POST['test'];

$link = mysql_connect("localhost");

$result = mysql_query ("select req_ObjectId,req_ClientId,date_format(date,'%a, %d %b %Y') as Date,time from test.test5 where test.test5.row=$test");

while ($row = mysql_fetch_object($result)) {

header("Last-Modified: Tue, 31 Jan 2006 10:54:00 GMT");

header("Cache-Control: Dynamic");

header('Content-type: image/jpeg');

header('Content-transfer-encoding: binary');

$src =imagecreatefromjpeg('//opt/lampp/htdocs/samsung.jpg');

imagejpeg($src,$row->req_ObjectId,100);

#copy('$src', $row->req_ObjectId.".jpg");

#echo '<img src="'.$row->req_ObjectId.'jpg">';

#setcookie("name", $row->reql);

sleep(0.5); #just for testing

}

mysql_close($link);

?>

פורסם
  • מחבר

יש לי פתרון טיפה טוב יותר(לדעתי)


קובץ:pic.php
<?php
header('Content-Type: image/jpeg');
header('Content-Disposition: attachment; filename="'.$_GET['name'].'.jpg"');
readfile('//opt/lampp/htdocs/mamimo.jpg');
?>
איפה שאתה רוצה את התמונה:
<img src="pic.php?name=<?php echo $row->req_Objectid; ?>" />

אכן נראה פשוט, אני צריך להציג את התמונה בתוך לולאה (כל פעם אחת אחרת), אים תוכל להתייחס לקוד שבתגובה הקודמת שלי.

תודה

פורסם

אם הבנתי נכון:


<?php
echo $_POST['test'];
$link = mysql_connect("localhost");
$result = mysql_query ("select req_ObjectId,req_ClientId,date_format(date,'%a, %d %b %Y') as Date,time from test.test5 where test.test5.row=$test");

while ($row = mysql_fetch_object($result)) {
echo '<img src="pic.php?name='.$row->req_Objectid.'" /><br />';
}
mysql_close($link);
?>

פעם הבאה פשוט תערוך את ההודעה של אם מידע חדש במקום להגיב פעמיים

פורסם
  • מחבר

בדיקה

פורסם

הקובץ שמראה את התמונה:

<body onLoad='frames["end"].location.href="delete.php"' onUnLoad='frames["end"].location.href="delete.php"'>
<ifrmae width="1" height="1" name="endd" src="bla.html">
<?
copy("bla.jpg", $row.".jpg");
echo '<img src="'.$row.'.jpg">';
setcookie("name", $row);
?>
</body>

delete.php:

<?
unlink($_COOKIE["name"].".jpg");
?>

הקוד עקרונית עובד, אבל החלק של ה-JavaScript מקרטע. :-X

אתה יכול לראות את זה ע"י כניסה ידנית ל-delete.php לאחר שהדף סיים לטעון.

אולי בגלל endd ו end?

פורסם

אולי בגלל endd ו end?

משום מה FF הפסיק לתת שגיאות אבל לא עושה מעבר.

IE פשוט ממשיך לתת שגיאות.

פורסם
  • מחבר

אם הבנתי נכון:


<?php
echo $_POST['test'];
$link = mysql_connect("localhost");
$result = mysql_query ("select req_ObjectId,req_ClientId,date_format(date,'%a, %d %b %Y') as Date,time from test.test5 where test.test5.row=$test");

while ($row = mysql_fetch_object($result)) {
echo '<img src="pic.php?name='.$row->req_Objectid.'" /><br />';
}
mysql_close($link);
?>

פעם הבאה פשוט תערוך את ההודעה של אם מידע חדש במקום להגיב פעמיים

טוב,

לאחר מספר נסיונות :

ביצעתי את שהצעת, קובץ עם התוכן שהוצע והוספתי את השורה ללולאה שלי.

ואני מקבל :

(אני לא יכול לרשום את התוצאה פה - מקבל ABUSE מ SPD, לכן צרפתי את ה"פלט" כקובץ תמונה).

אני לא מצפה לראות תמונה משום שזה לא תחת ממשק גראפי אך ברור כי משהו לא עובד כמו שצריך.

תודה רבה לעזרה עד כה.

[attachment deleted by admin]

פורסם

אם הבנתי נכון:


<?php
echo $_POST['test'];
$link = mysql_connect("localhost");
$result = mysql_query ("select req_ObjectId,req_ClientId,date_format(date,'%a, %d %b %Y') as Date,time from test.test5 where test.test5.row=$test");

while ($row = mysql_fetch_object($result)) {
echo '<img src="pic.php?name='.$row->req_ObjectId.'" /><br />';
}
mysql_close($link);
?>

היתה לי שגיאת כתיב ב

$row->req_Objectid

במקום

$row->req_ObjectId

פורסם
  • מחבר

היתה לי שגיאת כתיב ב

$row->req_Objectid

במקום

$row->req_ObjectId

אוקי, חבל שלא שמתי לב בעצמי זה היה מזרז את העניינים.

כעת, כפי שציינתי מקודם אני משתמש בפרל על מנת למשוך את המידע. כאשר המטרה היא לבדוק האם שרת פרוקסי שנעשו בו שינויים מבצע cache לאובייקט המבוקש.

עדיין אחרי שתיקנתי את השגיאה, אז הפלט הוא דומה עם שם האובייקט הנכון (מודפס על גבי המסך) והפרוקסי מזהה את זה כטקסט, אולי echo זו לא הדרך הנכונה??

אני בדקתי וכשאני מושך ב get (בפרל) את התמונה ישירות זה כן עושה לזה cache.

תודה :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים