الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في json

بدأه sabreofthewind في 20 يونيو 2013 · 9 رد · 1,160 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم
أخوتي في الله ، أريد مساعدة منكم في سكريبت جزاكم الله خيرا
السكريبت يرفع ملفات مستخدمي موقعي مباشرة إلى سيرفر jheberg المشكل هو كيفية استرجاع إجابة السيرفر (json) لوضعها في قاعدة للبيانات
السكريبت :

<html>
<body>

<form action="2.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
 
   
                 $url = 'http://zoidberg.jheberg.net/jheberg/index.php?method=apiUpload';
               
                /******************************************/
                /* Envoie du fichier                      */
                /******************************************/
 
               $postData = array('file' => '@'.realpath($file), 'username' => false, 'password' => false);
 
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
                $data = curl_exec($ch);
                curl_close($ch);
               
                $data = json_decode($data, true);
                   
                   
// Afficher les résultat
var_dump($data);
     
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

السكريبت يعطي إجابة  data  = null  

#2

قم بطباعة data قبل السطر

 $data = json_decode($data, true);
#3
choclatboy كتب:

 

قم بطباعة data قبل السطر

 $data = json_decode($data, true);

النتيجة :  bool(false)

#4

السلام عليكم

 

المشكلة ليست في تنسيق json الذي يتم جلبه المشكلة في البيانات المرسلة عبر curl , المتغير $file غير معرف في الكود الخاص بك ؟

 

أريد أن أوضح بعض الأشياء أولاً :

- عند رفع ملف باستخدام curl سيتم ارفاق المسار الكامل للملف مسبوقاً بعلامة @ ضمن مصفوفة البيانات المرسلة .

- أنت تريد إرسال ملفات من أجهزة العملاء إذاً عليك رفع هذه الملفات إلى الخادم ومن ثم إرسالها لموقع أخر عبر curl .

- يتم تخزين الملف بعد رفعة على الخادم باسم مؤقت يمكنك تمريره مباشراً عبر curl ولكن سيكون الملف بامتداد tmp وبالاسم المؤقت من خلال $_FILES["file"]["tmp_name"] فإذا أردت تمرير الملف باسمه الحقيقي وامتداده عليك نقله لمجلد أخر وتسميته بنفس اسمه الحقيقي ثم جلب المسار الكامل للملف وتمريره عبر curl , للحصول على المسار الكامل يمكنك قراءة موضوع الثوابت السحرية في لغة php .

الكود سيكون على الشكل التالي :

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$allowedTypes = array("image/gif","image/jpeg","image/jpg","image/pjpeg","image/x-png","image/png");
$extension = explode(".", $_FILES["file"]["name"]);
$extension = strtolower(end($extension));

if (in_array($extension, $allowedExts) &&
    in_array($_FILES["file"]["type"], $allowedTypes) &&
    $_FILES["file"]["size"] < 20000)
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
            $url = 'http://zoidberg.jheberg.net/jheberg/index.php?method=apiUpload';
            /******************************************/
            /* Envoie du fichier                      */
            /******************************************/
            $postData = array('file' => '@'.__DIR__."/upload/" . $_FILES["file"]["name"], 'username' => false, 'password' => false);
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            $data = curl_exec($ch);
            curl_close($ch);
            $data = json_decode($data, true);
            // Afficher les résultat
            var_dump($data);
        }
    }
}
else
{
    echo "Invalid file";
}
?>

- لاحظ أنه يتم حفظ الملفات في مجلد باسم upload قبل ارسالها عبر curl فيجب انشاء هذه الملف وإعطائه صلاحيات القراءة والكتابة .

- لكن شرط حجم الصور المراد رفعها صغير جداً 20 KB .

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#5
ahmedsaoud31 كتب:

السلام عليكم

 

المشكلة ليست في تنسيق json الذي يتم جلبه المشكلة في البيانات المرسلة عبر curl , المتغير $file غير معرف في الكود الخاص بك ؟

 

أريد أن أوضح بعض الأشياء أولاً :

- عند رفع ملف باستخدام curl سيتم ارفاق المسار الكامل للملف مسبوقاً بعلامة @ ضمن مصفوفة البيانات المرسلة .

- أنت تريد إرسال ملفات من أجهزة العملاء إذاً عليك رفع هذه الملفات إلى الخادم ومن ثم إرسالها لموقع أخر عبر curl .

- يتم تخزين الملف بعد رفعة على الخادم باسم مؤقت يمكنك تمريره مباشراً عبر curl ولكن سيكون الملف بامتداد tmp وبالاسم المؤقت من خلال $_FILES["file"]["tmp_name"] فإذا أردت تمرير الملف باسمه الحقيقي وامتداده عليك نقله لمجلد أخر وتسميته بنفس اسمه الحقيقي ثم جلب المسار الكامل للملف وتمريره عبر curl , للحصول على المسار الكامل يمكنك قراءة موضوع الثوابت السحرية في لغة php .

الكود سيكون على الشكل التالي :

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$allowedTypes = array("image/gif","image/jpeg","image/jpg","image/pjpeg","image/x-png","image/png");
$extension = explode(".", $_FILES["file"]["name"]);
$extension = strtolower(end($extension));

if (in_array($extension, $allowedExts) &&
    in_array($_FILES["file"]["type"], $allowedTypes) &&
    $_FILES["file"]["size"] < 20000)
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
        if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
            $url = 'http://zoidberg.jheberg.net/jheberg/index.php?method=apiUpload';
            /******************************************/
            /* Envoie du fichier                      */
            /******************************************/
            $postData = array('file' => '@'.__DIR__."/upload/" . $_FILES["file"]["name"], 'username' => false, 'password' => false);
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            $data = curl_exec($ch);
            curl_close($ch);
            $data = json_decode($data, true);
            // Afficher les résultat
            var_dump($data);
        }
    }
}
else
{
    echo "Invalid file";
}
?>

- لاحظ أنه يتم حفظ الملفات في مجلد باسم upload قبل ارسالها عبر curl فيجب انشاء هذه الملف وإعطائه صلاحيات القراءة والكتابة .

- لكن شرط حجم الصور المراد رفعها صغير جداً 20 KB .

 

السلام عليكم

شكرا لك أخي على تجاوبك

الطريقة التي إعتمدتها برفع الملف إلى موقعي أولا ثم إلى السيرفر، قد إعتمدتها من قبل و لم تشتغل معي ( الملف يتم رفعه إلى موقعي في المجلد upload بشكل صحيح ) هذا ما يدفعني إلى الشك في  كون هذا الكود صحيح أم لا :

$ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            $data = curl_exec($ch);
            curl_close($ch);

علما أني إستقيته من هذا الرابط الذي دلتني إليه إدارة السيرفر :: pastebin.com/mX7m1qxU

 

بالنسبة لحجم الصورة ، فهذا مثال على سبيل التجربة .

و شكرا .

#6

وعليكم السلام

 

كلامك هذا يعني أن الكود الذي أرفقته لك أيضاً لا يعمل ؟

 

- تم تجربة الكود على السرفر المحلي وهو يعمل بشكل جيد

- تأكيد من إعدادات الإستضافة التي تستخدمها وأن جميع الأدوات اللازمة تعمل كـتشغيل مكتبة curl نفذ الدالة phpinfo للتأكد من إعدادت php على الإستضافة التي تستخدمها.

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#7

أنا  أستعمل إستضافة biz.nf  و curl  تعمل بشكل صحيح :

<?php
// ### Checks for presence of the cURL extension.
function _iscurlinstalled() {
    if  (in_array  ('curl', get_loaded_extensions())) {
        return true;
    }
    else{
        return false;
    }
}  

if (_iscurlinstalled()) echo "cURL is installed"; else echo "cURL is NOT installed";

?>

النتيجة :: cURL is installed

 

و الله زدت من حيرتي يا أخي!

#8

ما هي نتيجة data عندك يا  ahmedsaoud31   ?

#9

هذه هي محتويات المتغير $data باستخدام دالة var_dump بعد رفع صورة ما  :

array(5) { ["error"]=> bool(false) ["error_string"]=> string(0) "" ["file_name"]=> string(9) "WEBO1.JPG" ["file_size"]=> int(182471) ["url"]=> string(47) "http://www.jheberg.net/captcha/63zsZY-webo1-jpg" }

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#10

شكرا لإهتمامك ، سوف أجرب السكريبت على إستضافات أخرى ، علما أني جربته على إستضافة مدفوعة (إتصالات المغرب) لكنها لم تعطي أي نتيجة .

مواضيع مشابهة