לא נפתר עזרה בהעתקת קובץ למערכת אחרת
-
אני מנסה להוריד קובץ ב-PHP ולהעלות אותו למערכת אחרת, וזה מחזיר לי שגיאה.
נראה לי שזה קשור לזה שהקובץ יורד כבינארי או משהו דומה.מה צריך לעשות כדי להפוך את הקובץ לקובץ רגיל שאוכל להעלות את זה למערכת אחרת?
עריכה (ניסיתי לשלוח את הקובץ למייל עם PHPMailer וזה עובד מצוין, רק העברה ממערכת למערכת לא הולך לי.)
-
אין כאן משהו שמבין בזה?
-
אפרט יותר את הבעיה.
אני מריץ קוד שמוריד קובץ ומעלה את זה אח"כ לקו אחר.
ניסיתי בכמה אופנים וזה נכשל.
להלן הקוד.
$url = 'https://www.call2all.co.il/ym/api/DownloadFile?&token=048******:****&path=ivr/1/1/951.wav'; $con = new connecting_to_yemot_api('025*****', '****'); $body = array ( 'path' => 'ivr/3/951.wav', 'convertAudio' => 0, 'fileUpload' => $url ); $a = $con -> connecting('UploadFile', $body); print_r($a);
וזה השגיאה:
stdClass Object ( [responseStatus] => ERROR [message] => System error [messageCode] => 105 [yemotAPIVersion] => 6 )
ניסיתי גם לשלוח המרה
convertAudio' => 1'
ועדיין מחזיר אותו שגיאה. -
@ירחמיאל השורה שבה אתה מוריד את הקובץ לא כתובה טוב, לכאורה צריך להיות כתוב:
https://www.call2all.co.il/ym/api/DownloadFile?token=0777777777:******&path=ivr2:/1/1/951.wav
תנסה לראות אם זה עובד כך...
(אף פעם לא ניסיתי להוריד ולהעלות קובץ באותו קוד) -
@dudu
זה היה טעות בהעתקה.
(זה נשמט בעת מחיקת הסיסמה).
בקובץ זה כתוב נכון.
וזה השגיאות.
תיקנתי את הפוסט. -
@ירחמיאל כולל הivr2?
בשתי המקומות כתוב לך ivr ולא ivr2 גם בהורדה וגם בהעלאה... -
@dudu
לפי הידוע לי זה משנה רק ב-API החדשים כגון העתקת/העברת/מחיקת קבצים.
בכל אופן ניסיתי עכשיו עם ivr2 ועדיין אותו דבר. -
@ירחמיאל הבעיה היא שהקובץ בכלל לא יורד...
זו לא הצורה הנכונה לעשות את זה... -
@dudu
צודק.
היה חסר()file_get_contents
הוספתי, ועכשיו יש שגיאה אחרת.
הנה הקוד המעודכן:$url = file_get_contents('https://www.call2all.co.il/ym/api/DownloadFile?token=048******:****&path=ivr2:1/1/951.wav'); $con = new connecting_to_yemot_api('025*****', '****'); $body = array ( 'path' => 'ivr/3/951.wav', 'convertAudio' => 0, 'fileUpload' => $url ); $a = $con -> connecting('UploadFile', $body); print_r($a);
ועכשיו השגיאה היא:
stdClass Object ( [yemotAPIVersion] => 6 [responseStatus] => EXCEPTION [message] => Invalid WS request )
עריכה: עכשיו כבר נשלח למייל דרך PHPMailer , רק העלאה לקו אחר לא עובד.
-
-
@ירחמיאל
אולי תעלה לפה את כל הקוד ונוכל לראות? -
@אהרן-שובקס
זה כל הקוד, עם המחלקה:$url = file_get_contents('https://www.call2all.co.il/ym/api/DownloadFile?token=048******:****&path=ivr2:1/1/3186.wav'); $con = new connecting_to_yemot_api('025******', '****'); $body = array ( 'path' => 'ivr2:3/951.wav', 'convertAudio' => 1, 'fileUpload' => $url ); $a = $con -> connecting('UploadFile', $body); print_r($a); /*===============================================================*/ class BodyPost { // part "multipart/form-data" public static function PartPost($name, $val) { $body = 'Content-Disposition: form-data; name="' . $name . '"'; // check instance of oFile if($val instanceof oFile) { $file = $val->Name(); $mime = $val->Mime(); $cont = $val->Content(); $body .= '; filename="' . $file . '"' . "\r\n"; $body .= 'Content-Type: ' . $mime ."\r\n\r\n"; $body .= $cont."\r\n"; } else $body .= "\r\n\r\n".$val."\r\n"; return $body; } public static function Get(array $post, $delimiter = '-------------0123456789') { if(is_array($post) && !empty($post)) { $bool = true; //foreach($post as $val) if($val instanceof oFile) {$bool = true; break; }; if($bool) { $ret = ''; foreach($post as $name=>$val) $ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val); $ret .= "--" . $delimiter . "--\r\n"; } else $ret = http_build_query($post); } else throw new \Exception('Error input param!'); return $ret; } } class oFile { private $name; private $mime; private $content; public function __construct($name, $mime=null, $content=null) { if(is_null($content)) { $info = pathinfo($name); // check is exist and readable file if(!empty($info['basename']) && is_readable($name)) { $this->name = $info['basename']; // get MIME $this->mime = mime_content_type($name); // load file $content = file_get_contents($name); if($content!==false) { $this->content = $content; } else { throw new Exception('Don`t get content - "'.$name.'"'); } } else { throw new Exception('Error param'); } } else { $this->name = $name; if(is_null($mime)) $mime = mime_content_type($name); $this->mime = $mime; $this->content = $content; }; } public function Name() { return $this->name; } public function Mime() { return $this->mime; } public function Content() { return $this->content; } } class connecting_to_yemot_api { public $token; const URL = 'https://www.call2all.co.il/ym/api/'; public function __construct($user_name, $password) { $body = array('username' => $user_name, 'password' => $password); $body = http_build_query($body); $opts = array('http' => array( 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded", 'content' => $body, 'follow_location' => false) ); $context = stream_context_create($opts); $url = self::URL.'Login'; $result = file_get_contents($url, FALSE, $context); $result = json_decode($result); if($result -> responseStatus == 'OK') { $this -> token = $result -> token; return TRUE; } else { throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים'); } } public function __destruct() { $this -> connecting('Logout'); } public function connecting($action, $body = array()) { $delimiter = '----'.uniqid(); $body['token'] = $this -> token; $body = BodyPost::Get($body, $delimiter); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary='.$delimiter, 'content' => $body, 'follow_location' => false ) ); $context = stream_context_create($opts); $url = self::URL.$action; $result = file_get_contents($url, FALSE, $context); $headers = $this -> parseHeaders($http_response_header); if($headers['Content-Type'][0] == 'application/json') { return json_decode($result); } else { return $result; } } private function parseHeaders($headers) { // פונקציה שמקבלת מערך של שורות הכותרות // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד // מערך הכותרות $head = array(); foreach( $headers as $k=>$v ) { $t = explode( ':', $v, 2 ); if( isset( $t[1] ) ) { if($t[0] == 'Set-Cookie') { $CookiesArr = array(); $cookies = explode( ';', $t[1]); foreach($cookies as $cookie) { $c = explode( '=', $cookie); if( isset( $c[1] ) ) { $CookiesArr[ trim($c[0]) ] = trim( $c[1] ); } else { $CookiesArr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $CookiesArr; } elseif($t[0] == 'Content-Type') { $arr = array(); $children = explode( ';', $t[1]); foreach($children as $child) { $c = explode( '=', $child); if( isset( $c[1] ) ) { $arr[ trim($c[0]) ] = trim( $c[1] ); } else { $arr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $arr; } else { $head[ trim($t[0]) ] = trim( $t[1] ); } } else { $head[] = $v; if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) ) { $head['reponse_code'] = intval($out[1]); } } } return $head; } }
וזה התגובה:
stdClass Object ( [yemotAPIVersion] => 6 [responseStatus] => EXCEPTION [message] => Invalid WS request )
-
@ירחמיאל
המערכת נמצאת בפריווט? -
@אהרן-שובקס
לא