public function testStreamResponseNamed() { if(!($this->client->getAdapter() instanceof Zend_Http_Client_Adapter_Stream)) { $this->markTestSkipped('Current adapter does not support streaming'); return; } $this->client->setUri($this->baseuri . 'staticFile.jpg'); $outfile = tempnam(sys_get_temp_dir(), "outstream"); $this->client->setStream($outfile); $response = $this->client->request(); $this->assertTrue($response instanceof Zend_Http_Response_Stream, 'Request did not return stream response!'); $this->assertTrue(is_resource($response->getStream()), 'Request does not contain stream!'); $this->assertEquals($outfile, $response->getStreamName()); $stream_read = stream_get_contents($response->getStream()); $file_read = file_get_contents($outfile); $expected = $this->_getTestFileContents('staticFile.jpg'); $this->assertEquals($expected, $stream_read, 'Downloaded stream does not seem to match!'); $this->assertEquals($expected, $file_read, 'Downloaded file does not seem to match!'); }
public function getProperDimensionsPictureUrl($twitterId, $pictureUrl) { $pictureUrl = str_replace('_normal', '', $pictureUrl); $url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'le' . '/' . 'sociallogin' . '/' . 'twitter' . '/' . $twitterId; $filename = Mage::getBaseDir(Mage_Core_Model_Store::URL_TYPE_MEDIA) . DS . 'le' . DS . 'sociallogin' . DS . 'twitter' . DS . $twitterId; $directory = dirname($filename); if (!file_exists($directory) || !is_dir($directory)) { if (!@mkdir($directory, 0777, true)) { return null; } } if (!file_exists($filename) || file_exists($filename) && time() - filemtime($filename) >= 3600) { $client = new Zend_Http_Client($pictureUrl); $client->setStream(); $response = $client->request('GET'); stream_copy_to_stream($response->getStream(), fopen($filename, 'w')); $imageObj = new Varien_Image($filename); $imageObj->constrainOnly(true); $imageObj->keepAspectRatio(true); $imageObj->keepFrame(false); $imageObj->resize(150, 150); $imageObj->save($filename); } return $url; }
/** * Adds one or more files * * @param string|array $file File to add * @param string|array $validator Validators to use for this file, must be set before * @param string|array $filter Filters to use for this file, must be set before * @return Zend_File_Transfer_Adapter_Abstract * @throws Zend_File_Transfer_Exception Not implemented */ public function addFile($files, $validator = null, $filter = null) { foreach ($files as $name => $file) { $dest = tempnam(sys_get_temp_dir(), 'transfert'); $client = new Zend_Http_Client($file, array('adapter' => 'Zend_Http_Client_Adapter_Curl')); $response = $client->setStream($dest)->request(Zend_Http_Client::GET); $this->_files[$name] = array('size' => filesize($dest), 'tmp_name' => $dest, 'name' => basename($file)); $this->_files[$name]['type'] = $this->_detectMimeType($this->_files[$name]); } return $this; }
/** * Get Stream Data. * * * $data can also be stream (such as file) to which the data will be save. * * $client->setStream(); // will use temp file * $response = $client->request('GET'); * // copy file * copy($response->getStreamName(), "my/downloads/file"); * // use stream * $fp = fopen("my/downloads/file2", "w"); * stream_copy_to_stream($response->getStream(), $fp); * // Also can write to known file * $client->setStream("my/downloads/myfile")->request('GET'); * * @param resource $data * @param string $enctype * @return Default_Plugin_HttpBox */ function getStreamData($filename = null) { if (is_string($filename)) { $this->client->setStream($filename)->request('GET'); } else { $this->client->setStream(); // will use temp file $this->client->request('GET'); } // Запомним последний запрос в виде строки $this->last_request = $this->client->getLastRequest(); // Запомним последний запрос в виде Zend_Http_Response $this->last_response = $this->client->getLastResponse(); return $this; }
/** * Helper function to download the zip file from the passed url. * @param $url * @return array */ public function downloadPlugin($url) { $name = 'plugin' . md5($url) . '.zip'; $tmp = Shopware()->DocPath() . 'files/downloads/' . $name; $message = ''; try { $client = new Zend_Http_Client($url, array( 'timeout' => 30, 'useragent' => 'Shopware/' . Shopware()->Config()->Version )); $client->setStream($tmp); $client->request('GET'); $this->decompressFile($tmp); } catch (Exception $e) { $message = $e->getMessage(); } @unlink($tmp); return array( 'success' => empty($message), 'message' => $message, 'url' => $url ); }
function testStreamWarningRewind() { $httpClient = new Zend_Http_Client(); $httpClient->setUri('http://example.org'); $httpClient->setMethod(Zend_Http_Client::GET); ob_start(); $httpClient->setStream('php://output')->request(); ob_clean(); }
function getResultStream() { if (!$this->resourceURI) { $requestURI = $this->APIuri . "/users/" . $this->user . "/batchjobs/" . urlencode($this->batchName) . "/" . $this->resourceID . "." . $this->resultFormat; //$requestURI = $this->APIuri."/users/".$this->user."/batchjobs/".$this->batchName; $this->resourceURI = $requestURI; } else { $requestURI = $this->resourceURI; } $uriExplode = explode("/", $this->resourceURI); $fileName = $uriExplode[count($uriExplode) - 1]; $tempID = preg_replace('/[^a-z0-9]/i', '_', $fileName); $tempID_a = $tempID . "-temp-a"; $tempID_b = $tempID . "-temp-b"; $client = new Zend_Http_Client($requestURI, array('maxredirects' => 1, 'timeout' => self::HTTPtimeout)); $client->setStream(); //$client->setHeaders('Host', $this->requestHost); if ($this->resultFormat == "xml") { $client->setHeaders('Accept', 'application/json'); } else { $client->setHeaders('Accept', 'application/json'); } //$client->setHeaders('Accept', 'application/json'); $client->setHeaders('AUTHORIZATION', $this->password); //$client->setHeaders('User-Key', $this->userKey); $response = $client->request("GET"); copy($response->getStreamName(), self::resultCache . "/" . $tempID_a); $fp = fopen(self::resultCache . "/" . $tempID_b, "w"); stream_copy_to_stream($response->getStream(), $fp); $client->setStream(self::resultCache . "/" . $tempID_a)->request('GET'); return $response; }
public function installPlugin($source, $isUrl = false) { X_Debug::i("Installing plugin from {{$source}}: isUrl = {{$isUrl}}"); if ($isUrl) { // perform a download in a temp file $http = new Zend_Http_Client($source, array('headers' => array('User-Agent' => "vlc-shares/" . X_VlcShares::VERSION . " plugininstaller/" . X_VlcShares::VERSION))); $http->setStream(true); $source = $http->request()->getStreamName(); } try { // unzip and manifest parse $egg = X_Egg::factory($source, APPLICATION_PATH . '/../', APPLICATION_PATH . '/../data/plugin/tmp/', true); $pluginKey = $egg->getKey(); // first we must check if key already exists in the db $plugin = new Application_Model_Plugin(); Application_Model_PluginsMapper::i()->fetchByKey($pluginKey, $plugin); if ($plugin->getId() !== null) { throw new Exception(X_Env::_('plugin_err_installerror_keyexists') . ": {$pluginKey}"); } // time to check if plugin support this vlc-shares version $vFrom = $egg->getCompatibilityFrom(); $vTo = $egg->getCompatibilityTo(); if (version_compare(X_VlcShares::VERSION_CLEAN, $vFrom, '<') || $vTo !== null && version_compare(X_VlcShares::VERSION_CLEAN, $vTo, '>=')) { throw new Exception(X_Env::_('plugin_err_installerror_unsupported') . ": {$vFrom} - {$vTo}"); } // copy the files: first check if some file exists... $toBeCopied = array(); foreach ($egg->getFiles() as $file) { /* @var $file X_Egg_File */ if (!$file->getProperty(X_Egg_File::P_REPLACE, false) && file_exists($file->getDestination())) { throw new Exception(X_Env::_('plugin_err_installerror_fileexists') . ": {$file->getDestination()}"); } if (!file_exists($file->getSource())) { if (!$file->getProperty(X_Egg_File::P_IGNOREIFNOTEXISTS, false)) { throw new Exception(X_Env::_('plugin_err_installerror_sourcenotexists') . ": {$file->getSource()}"); } // ignore this item if P_IGNOREIFNOTEXISTS is true and file not exists continue; } $toBeCopied[] = array('src' => $file->getSource(), 'dest' => $file->getDestination(), 'resource' => $file); } // before copy act, i must be sure to be able to revert changes $plugin = new Application_Model_Plugin(); $plugin->setLabel($egg->getLabel())->setKey($pluginKey)->setDescription($egg->getDescription())->setFile($egg->getFile())->setClass($egg->getClass())->setType(Application_Model_Plugin::USER)->setVersion($egg->getVersion()); Application_Model_PluginsMapper::i()->save($plugin); // so i must copy uninstall information inside a uninstall dir in data $dest = APPLICATION_PATH . '/../data/plugin/_uninstall/' . $pluginKey; // i have to create the directory if (!mkdir($dest, 0777, true)) { throw new Exception(X_Env::_('plugin_err_installerror_uninstalldircreation') . ": {$dest}"); } if (!copy($egg->getManifestFile(), "{$dest}/manifest.xml")) { throw new Exception(X_Env::_('plugin_err_installerror_uninstallmanifestcopy') . ": " . $egg->getManifestFile() . " -> {$dest}/manifest.xml"); } $uninstallSql = $egg->getUninstallSQL(); if ($uninstallSql !== null && file_exists($uninstallSql)) { if (!copy($uninstallSql, "{$dest}/uninstall.sql")) { throw new Exception(X_Env::_('plugin_err_installerror_uninstallsqlcopy') . ": {$dest}"); } } // ... then copy foreach ($toBeCopied as $copyInfo) { $copied = false; if (!file_exists(dirname($copyInfo['dest']))) { @mkdir(dirname($copyInfo['dest']), 0777, true); } if (!copy($copyInfo['src'], $copyInfo['dest'])) { $this->_helper->flashMessenger(array('text' => X_Env::_('plugin_err_installerror_copyerror') . ": <br/>" . $copyInfo['src'] . '<br/>' . $copyInfo['dest'], 'type' => 'error')); } else { X_Debug::i("File copied {{$copyInfo['dest']}}"); $copied = true; } /* @var $xeggFile X_Egg_File */ $xeggFile = $copyInfo['resource']; if ($copied) { // check permission $permission = $xeggFile->getProperty(X_Egg_File::P_PERMISSIONS, false); if ($permission !== false) { if (!chmod($copyInfo['dest'], octdec($permission))) { X_Debug::e("Chmod {{$permission}} failed for file {{$copyInfo['dest']}}"); } else { X_Debug::i("Permissions set to {{$permission}} for file {{$copyInfo['dest']}} as required"); } } } else { if ($xeggFile->getProperty(X_Egg_File::P_HALTONCOPYERROR, false)) { X_Debug::f("File not copied {{$copyInfo['dest']}} and flagged as HaltOnCopyError"); break; } } } // change database $installSql = $egg->getInstallSQL(); if ($installSql !== null && file_exists($installSql)) { try { $dataSql = file_get_contents($installSql); if (trim($dataSql) !== '') { $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap'); $db = $bootstrap->getResource('db'); $db->getConnection()->exec($dataSql); } } catch (Exception $e) { X_Debug::e("DB Error while installind: {$e->getMessage()}"); $this->_helper->flashMessenger(X_Env::_('plugin_err_installerror_sqlerror') . ": {$e->getMessage()}"); //throw $e; } } // process acl fragment $aclHelper = X_VlcShares_Plugins::helpers()->acl(); // new classes $accounts = Application_Model_AuthAccountsMapper::i()->fetchAll(); foreach ($egg->getAclClasses() as $aclClass) { /* @var $aclClass X_Egg_AclClass */ $res = $aclHelper->addClass($aclClass->getName(), $aclClass->getProperty(X_Egg_AclClass::P_DESCRIPTION, '')); if (!$res) { $this->_helper->flashMessenger(array('text' => X_Env::_('plugin_err_installerror_aclclass', $aclClass->getName()), 'type' => 'warning')); continue; } $extends = $aclClass->getExtends(); if (count($extends)) { foreach ($accounts as $account) { /* @var $account Application_Model_AuthAccount */ foreach ($extends as $baseClass) { if (in_array($baseClass, $aclHelper->getPermissions($account->getUsername()))) { $aclHelper->grantPermission($account->getUsername(), $aclClass->getName()); } } } } } //new resources foreach ($egg->getAclResources() as $resource) { /* @var $resource X_Egg_AclResource */ $aclHelper->addResource($resource->getKey(), $resource->getClass(), $egg->getKey(), false); } $egg->cleanTmp(); unlink($source); return true; } catch (Exception $e) { if ($egg !== null) { $egg->cleanTmp(); } // delete the uploaded file unlink($source); //$this->_helper->flashMessenger(array('text' => X_Env::_('plugin_err_installerror').": ".$e->getMessage(), 'type' => 'error')); //return false; throw $e; } }
/** * Attempt to download the extension archive file to var directory * * @param Ash_Up_Model_Extension $extension * @return Ash_Up_Helper_Data */ public function downloadArchive(Ash_Up_Model_Extension $extension) { $uri = $extension->getDownloadUri(); $path = Mage::getConfig()->getVarDir('ash_installer/downloads'); Mage::getConfig()->createDirIfNotExists($path); $archivePath = $path . DIRECTORY_SEPARATOR . $extension->getExtensionName() . '.zip'; // configure client to download archive file $client = new Zend_Http_Client($uri); $adapter = new Zend_Http_Client_Adapter_Curl(); $adapter->setConfig(array('curloptions' => array(CURLOPT_BINARYTRANSFER => true))); $client->setAdapter($adapter); $client->setStream($archivePath); // stream file to specified path $response = $client->request(Zend_Http_Client::GET); if ($response->getStatus() != 200) { Mage::throwException($this->__('Error downloading archive (%s): %s', $extension->getExtensionName(), $response->getMessage())); } // set archive path $extension->setLastDownloaded(time())->setArchivePath($archivePath)->save(); return $this; }
/** * Direct download of a plugin zip file. */ public function downloadAction() { return; //As long as this action is not being used, they should be inactive. $url = $this->Request()->link; $tmp = @tempnam(Shopware()->DocPath() . 'files/downloads', 'plugins'); try { $client = new Zend_Http_Client($url, array( 'timeout' => 10, 'useragent' => 'Shopware/' . Shopware()->Config()->Version )); $client->setStream($tmp); $client->request('GET'); $this->decompressFile($tmp); } catch (Exception $e) { $message = $e->getMessage(); } @unlink($tmp); $this->View()->assign(array( 'success' => !isset($message), 'message' => isset($message) ? $message : '' )); }