public function testInstall() { $composer = new ComposerTestFramework\Composer\Wrapper(); $artifactDirectory = new \SplFileInfo($this->tempdir()); $pluginDirectory = new \SplFileInfo(realpath(__DIR__ . '/../../')); $projectDirectory = new \SplFileInfo($this->tempdir()); //var_dump($pluginDirectory, $artifactDirectory, $projectDirectory); $composer->archive($pluginDirectory, $artifactDirectory); $composerJson = new \SplTempFileObject(); $composerJsonContent = <<<composerJson { "repositories": [ { "type": "artifact", "url": "{$artifactDirectory}/" }, { "type": "composer", "url": "http://packages.firegento.com" } ], "require": { "cotya/composer-magento-plugin": "dev-master@dev", "firegento/psr0autoloader": "dev-master" } } composerJson; $composerJson->fwrite($composerJsonContent); $composer->install($projectDirectory, $composerJson); $this->assertFileNotExists($projectDirectory . '/vendor/magento-hackathon/magento-composer-installer/composer.json'); }
public static function getFileObjectFromContents($contents) { $fileobject = new \SplTempFileObject(); $fileobject->fwrite($contents); $fileobject->rewind(); return $fileobject; }
/** * @param string $content * * @return Statement * @throws \InvalidArgumentException */ public function parseContent($content) { if (is_string($content) === false) { throw new \InvalidArgumentException('Argument "$content" isn\'t a string type'); } $fileObject = new \SplTempFileObject(); $fileObject->fwrite($content); return $this->parseFileObject($fileObject); }
public function binaryProvider() : array { return [[function () : \SplFileObject { return new \SplFileObject(__DIR__ . '/resources/formats-output-dictionary.csv'); }, file_get_contents(__DIR__ . '/resources/formats-output-dictionary.csv')], [function () : \SplFileObject { $file = new \SplTempFileObject(); $file->fwrite('𩸽'); return $file; }, '𩸽']]; }
/** * Get writable copy of the file * * @return SplFileObject */ protected function getWritableFile() { if ($this->tmpfile === null) { $this->tmpfile = new \SplTempFileObject(131072); $this->file->rewind(); foreach ($this->file as $line) { $this->tmpfile->fwrite($line); } } return $this->tmpfile; }
public function action_post_index_collection() { // Get payload from CSV repo $csv = service('repository.csv')->get($this->request->param('csv_id')); $fs = service('tool.filesystem'); $reader = service('filereader.csv'); $transformer = service('transformer.csv'); // Read file $file = new SplTempFileObject(); $contents = $fs->read($csv->filename); $file->fwrite($contents); // Get records // @todo read up to a sensible offset and process the rest later $records = $reader->process($file); // Set map and fixed values for transformer $transformer->setMap($csv->maps_to); $transformer->setFixedValues($csv->fixed); $this->_usecase = service('factory.usecase')->get($this->_resource(), 'import')->setPayload($records)->setTransformer($transformer); }
protected function _generateThumbnail($file) { try { $thumb = PhpThumbFactory::create($file)->setOptions(array('jpegQuality' => 50)); } catch (Exception $e) { // GD is not available return false; } $thumb_size = $this->getThumbnailSize(); $thumb->resize($thumb_size['x'], $thumb_size['y']); ob_start(); echo $thumb->getImageAsString(); $str = ob_get_clean(); if ($str) { $file = new SplTempFileObject(); $file->fwrite($str); return $file; } return false; }
protected function _createThumbnail($file) { @ini_set('memory_limit', '256M'); try { $imagine = new \Imagine\Gd\Imagine(); $image = $imagine->open($file); $size = $this->getThumbnailSize(); $image_size = $image->getSize(); $larger = max($image_size->getWidth(), $image_size->getHeight()); $scale = max($size['x'], $size['y']); $new_size = $image_size->scale(1 / ($larger / $scale)); $image = $image->thumbnail($new_size, \Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND); $file = new SplTempFileObject(); $file->fwrite((string) $image); return $file; } catch (Exception $e) { return false; } }
/** * Export Job as Tmx File * * @param $jid * @param $jPassword * @param $sourceLang * @param $targetLang * * @return SplTempFileObject $tmpFile * */ public function exportJobAsTMX($jid, $jPassword, $sourceLang, $targetLang) { $tmpFile = new SplTempFileObject(15 * 1024 * 1024); $tmpFile->fwrite('<?xml version="1.0" encoding="UTF-8"?> <tmx version="1.4"> <header creationtool="Matecat-Cattool" creationtoolversion="' . INIT::$BUILD_NUMBER . '" o-tmf="Matecat" creationid="Matecat" datatype="plaintext" segtype="sentence" adminlang="en-US" srclang="' . $sourceLang . '"/> <body>'); switch ($this->output_type) { case 'translation': $result = getTranslationsForTMXExport($jid, $jPassword); break; case 'mt': $result = getMTForTMXExport($jid, $jPassword); break; case 'tm': $result = getTMForTMXExport($jid, $jPassword); break; default: $result = getTranslationsForTMXExport($jid, $jPassword); break; } foreach ($result as $k => $row) { $dateCreate = new DateTime($row['translation_date'], new DateTimeZone('UTC')); $tmx = ' <tu tuid="' . $row['id_segment'] . '" creationdate="' . $dateCreate->format('Ymd\\THis\\Z') . '" datatype="plaintext" srclang="' . $sourceLang . '"> <prop type="x-MateCAT-id_job">' . $row['id_job'] . '</prop> <prop type="x-MateCAT-id_segment">' . $row['id_segment'] . '</prop> <prop type="x-MateCAT-filename">' . $row['filename'] . '</prop> <tuv xml:lang="' . $sourceLang . '"> <seg>' . htmlspecialchars($row['segment']) . '</seg> </tuv> <tuv xml:lang="' . $targetLang . '"> <seg>' . htmlspecialchars($row['translation']) . '</seg> </tuv> </tu> '; $tmpFile->fwrite($tmx); } $tmpFile->fwrite("\n </body>\n</tmx>"); $tmpFile->rewind(); return $tmpFile; }
public function printactofreceiving($orders) { if (is_string($orders)) { $orders = [$orders]; } $params = []; foreach ($orders as $order => $seats) { if (is_int($order)) { list($order, $seats) = [$seats, 1]; } $params[] = ['@number' => $order, '@seats' => $seats]; } $params = ['Orders' => ['Order' => $params]]; $resp = $this->request(__FUNCTION__, $params, true); $headers = $resp->getHeaders(); $tmp = new \SplTempFileObject(); $tmp->fwrite($resp->getBody()); return $tmp; }
public function parse(\SplFileInfo $file, string $filename = null, string $title = null) : Dictionary { $this->filenames = []; if ($file instanceof \SplTempFileObject) { $binary = (new \esperecyan\dictionary_php\Parser())->getBinary($file); } if (!$file instanceof \SplFileObject) { $file = $file->openFile(); } else { $file->rewind(); } $finfo = new Finfo(FILEINFO_MIME_TYPE); $type = isset($binary) ? $finfo->buffer($binary) : $finfo->file($file->getRealPath()); switch ($type) { case 'application/zip': $this->header = true; $quizFile = $this->parseArchive($file); $binary = file_get_contents($quizFile); if (!mb_check_encoding($binary, 'Windows-31J')) { throw new SyntaxException(sprintf(_('%sの辞書の符号化方式 (文字コード) は Shift_JIS でなければなりません。'), 'Inteligenceω')); } $txt = new \SplTempFileObject(); $txt->fwrite(mb_convert_encoding($binary, 'UTF-8', 'Windows-31J')); $files = new \FilesystemIterator($quizFile->getPath(), \FilesystemIterator::SKIP_DOTS); unlink($quizFile); break; case 'text/csv': case 'text/plain': $txt = $file; break; default: throw new SyntaxException(_('Inteligenceωの辞書はテキストファイルかZIPファイルでなければなりません。')); } $filesCount = count($this->filenames) + 1; if ($filesCount > GenericDictionaryParser::MAX_FILES) { throw new SyntaxException(sprintf(_('アーカイブ中のファイル数は %1$s 個以下にしてください: 現在 %2$s 個'), GenericDictionaryParser::MAX_FILES, $filesCount)); } $dictionary = new Dictionary($files ?? [], $this->filenames); $txt->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::READ_AHEAD | \SplFileObject::SKIP_EMPTY); foreach ($txt as $line) { $this->parseLine($dictionary, $line); } $this->parseLine($dictionary); if (!$dictionary->getWords()) { throw new SyntaxException(_('正常に変換可能な行が見つかりませんでした。')); } if ($this->wholeText !== '') { $regard = $this->generateRegard(); if ($regard) { $metaFields['@regard'] = $this->generateRegard(); } } if (!is_null($title)) { $metaFields['@title'] = $title; } elseif (!is_null($filename)) { $titleFromFilename = $this->getTitleFromFilename($filename); if ($titleFromFilename) { $metaFields['@title'] = $titleFromFilename; } } if (isset($metaFields)) { $dictionary->setMetadata($metaFields); } return $dictionary; }
private function updateOrDelete($id, $data = null) { /* Thanks to https://www.daniweb.com/web-development/php/threads/102279/deleting-a-line-from-a-file#post1353582 */ /* * Create a new SplFileObject representation of the file * Open it for reading and writing and place the pointer at the beginning of the file * @see fopen for additional modes */ $file = new \SplFileObject($this->filename, 'a+'); /* * Set a bitmask of the flags to apply - Only relates to reading from file * In this case SplFileObject::DROP_NEW_LINE to remove new line charachters * and SplFileObject::SKIP_EMPTY to remove empty lines */ $file->setFlags(7); /* * Lock the file so no other user can interfere with reading and writing while we work with it */ $file->flock(LOCK_EX); /* * Create a SplTempFileObject * 0 indicates not to use memory to store the temp file. * This is probably slower than using memory, but for a large file it will be much more effective * than loading the entire file into memory * @see http://www.php.net/manual/en/spltempfileobject.construct.php for more details */ $temp = new \SplTempFileObject(0); /* * Lock the temp file just in case */ $temp->flock(LOCK_EX); /* * Iterate over each line of the file only loading one line into memory at any point in time */ foreach ($file as $key => $line) { if ($key != $id) { /* * If this line does NOT match out delete write it to the temp file * Append a line ending to it */ $temp->fwrite($line . PHP_EOL); } else { if ($data !== null) { $temp->fwrite($data . PHP_EOL); } } } /* * Truncate the existing file to 0 */ $file->ftruncate(0); /* * Write the temp file back to the existing file */ foreach ($temp as $line) { /* * Iterate over temp file and put each line back into original file */ $file->fwrite($line); } /* * Release the file locks */ $temp->flock(LOCK_UN); $file->flock(LOCK_UN); return true; }
/** * Removes a row from the CSV file by streaming to a temporary file, ignoring * the specified line number(s). * * @param int|array $rowNumber The zero-based integer row number to remove, * or an array of integers to remove multiple rows (row 0 is header row) * @param mixed $replaceWith The row data to replace with, or null to just * remove to original row * * @return boolean True if any changes were made, otherwise false */ public function updateRow($rowNumber, $replaceWith) { $this->changesMade = true; $changed = false; $rowNumberArray = []; // Ensure we are working with an array. if (is_array($rowNumber)) { $rowNumberArray = $rowNumber; } else { array_push($rowNumberArray, $rowNumber); } $temp = new TempFile(self::TEMP_FILE_SIZE); $temp->setFlags(File::READ_CSV | File::READ_AHEAD | File::SKIP_EMPTY | File::DROP_NEW_LINE); $this->lock(); $this->file->fseek(0); // Copy contents of file into temp: while (!$this->file->eof()) { $temp->fwrite($this->file->fread(1024)); } $temp->rewind(); $this->file->ftruncate(0); $this->file->fseek(0); foreach ($temp as $rowNumber => $row) { if (in_array($rowNumber - 1, $rowNumberArray)) { // Current row is to be updated or deleted. Do not write original // row back to file. if (!is_null($replaceWith)) { // Ensure that $replaceWidth is an indexed array. if ($this->isAssoc($replaceWith)) { $replaceWith = $this->toIndexed($replaceWith); } $replaceWith = $this->fillMissing($replaceWith, $row); $this->file->fputcsv($replaceWith); } $changed = true; continue; } $this->file->fputcsv($row); } $this->file->flock(LOCK_UN); return $changed; }
/** * @param string $input * @expectedException \esperecyan\dictionary_php\exception\SyntaxException * @dataProvider invalidDictionaryProvider */ public function testSyntaxException(string $input) { $temp = new \SplTempFileObject(); $temp->fwrite(preg_replace('/\\n */u', "\r\n", $input)); (new CatchmParser())->parse($temp); }
/** * Import routes from a specified Asset ID * * @throws \Exception */ public function routes() { $message = null; try { $id = $this->inputfilter->clean($this->app->get('PARAMS.id'), 'alnum'); $item = (new \Dsc\Mongo\Collections\Assets())->setState('filter.id', $id)->getItem(); if (empty($item->id)) { throw new \Exception('Invalid Item'); } $file = new \SplTempFileObject(); // TODO Push this to the Assets model switch ($item->storage) { case "s3": $contents = @file_get_contents($item->url); break; case "gridfs": default: $length = $item->length; $chunkSize = $item->chunkSize; $chunks = ceil($length / $chunkSize); $collChunkName = $item->collectionNameGridFS() . ".chunks"; $collChunks = $item->getDb()->{$collChunkName}; $contents = null; for ($i = 0; $i < $chunks; $i++) { $chunk = $collChunks->findOne(array("files_id" => $item->_id, "n" => $i)); $contents .= $chunk["data"]->bin; } break; } $file->fwrite($contents); $reader = new \Ddeboer\DataImport\Reader\CsvReader($file, ","); $reader->setHeaderRowNumber(0); $this->app->set('item', $item); $this->app->set('count', count($reader)); $skipped = 0; $inserted = 0; $updated = 0; $failed = 0; $errors = array(); foreach ($reader as $row) { set_time_limit(0); if (empty($row['Original'])) { $skipped++; continue; } if (strpos($row['Original'], '/') === 0) { $row['Original'] = substr($row['Original'], 1); } if (empty($row['Original'])) { $skipped++; continue; } $redirect = \Redirect\Admin\Models\Routes::findOne(array('url.alias' => $row['Original'])); if (empty($redirect->id)) { // insert $redirect = new \Redirect\Admin\Models\Routes(); $redirect->{'url.alias'} = $row['Original']; $redirect->{'url.redirect'} = $row['Target']; try { $redirect->save(); $inserted++; } catch (\Exception $e) { $failed++; $errors[] = $e->getMessage(); } } else { // update $redirect->{'url.alias'} = $row['Original']; $redirect->{'url.redirect'} = $row['Target']; try { $redirect->save(); $updated++; } catch (\Exception $e) { $failed++; $errors[] = $e->getMessage(); } } } $this->app->set('skipped', $skipped); $this->app->set('inserted', $inserted); $this->app->set('updated', $updated); $this->app->set('failed', $failed); $this->app->set('errors', $errors); $this->app->set('message', $message); echo $this->theme->render('Redirect/Admin/Views::importer/routes_results.php'); } catch (\Exception $e) { \Dsc\System::addMessage($e->getMessage(), 'error'); $this->app->reroute('/admin/redirect/import'); return; } }
public function testMaximumNesting() { if (!function_exists('xdebug_is_enabled')) { $this->markTestSkipped('xDebug is not installed'); } $xdebug_start = !xdebug_is_enabled(); if ($xdebug_start) { xdebug_enable(); } ini_set('xdebug.max_nesting_level', 200); $file = new \SplTempFileObject(); for ($i = 0; $i < 500; $i++) { $file->fwrite("1,2,3\n"); } $reader = new CsvReader($file); $reader->rewind(); $reader->setStrict(true); $reader->setColumnHeaders(array('one', 'two')); $current = $reader->current(); $this->assertEquals(null, $current); if ($xdebug_start) { xdebug_disable(); } }
/** * Send CDR EOF (Central Directory Record End-of-File) record. Most values * point to the corresponding values in the ZIP64 CDR. The optional comment * still goes in this CDR however. * * @return \SplTempFileObject */ private function addCdrEof() { $comment = $this->archive->getComment(); $fields = [['V', 0x6054b50], ['v', 0xffff], ['v', 0xffff], ['v', 0xffff], ['v', 0xffff], ['V', 0xffffffff], ['V', 0xffffffff], ['v', strlen($comment)]]; $ret = PackHelper::packFields($fields) . $comment; $stream = new \SplTempFileObject(); $stream->fwrite($ret); $stream->rewind(); return $stream; }
/** * Removes a Key/Value pair based on its position in the file * * @param integer $position The offset position in the file */ public function remove($position) { $temp = new \SplTempFileObject(-1); $this->file->flock(LOCK_EX); $filesize = $this->file->getSize(); $metadata = $this->getMetadata($position); // Seek past the document we want to remove $this->file->fseek($metadata->length, SEEK_CUR); // Write everything after the target document to memory $temp->fwrite($this->file->fread($filesize)); // Clear the file up to the target document $this->file->ftruncate($position); // Write Temp back to the end of the file $temp->fseek(0); $this->file->fseek(0, SEEK_END); $this->file->fwrite($temp->fread($filesize)); $this->file->flock(LOCK_UN); }
public function motopressTable($attrs, $content = null) { extract(shortcode_atts(self::addStyleAtts(array()), $attrs)); global $motopressCESettings; require_once $motopressCESettings['plugin_root'] . '/' . $motopressCESettings['plugin_name'] . '/includes/getLanguageDict.php'; $motopressCELang = motopressCEGetLanguageDict(); if (!empty($classes)) { $classes = ' ' . $classes; } if (self::$isNeedFix && empty($mp_style_classes)) { if (!empty($style) && $style != 'none') { $mp_style_classes = 'motopress-table-style-' . $style; } if (!empty($custom_class)) { $mp_style_classes .= ' ' . $custom_class; } } if (!empty($mp_style_classes)) { $mp_style_classes = ' ' . $mp_style_classes; } $result = '<div class="motopress-table-obj' . self::getMarginClasses($margin) . $classes . '">'; $content = trim($content); $content = preg_replace('/^<p>|<\\/p>$/', '', $content); $content = preg_replace('/<br[^>]*>\\s*\\r*\\n*/is', "\n", $content); if (!empty($content)) { // $result .= '<table class="' . self::getBasicClasses(self::PREFIX . 'table', true) . $mp_style_classes . '">'; $result .= '<table class="' . self::getBasicClasses(self::PREFIX . 'table') . $mp_style_classes . '">'; $i = 0; if (version_compare(PHP_VERSION, '5.3.0', '>=')) { $rows = explode("\n", $content); $rowsCount = count($rows); foreach ($rows as $row) { $row = str_getcsv($row); $isLast = $i === $rowsCount - 1 ? true : false; self::addRow($row, $i, $isLast, $result); $i++; } } else { $tmpFile = new SplTempFileObject(); $tmpFile->setFlags(SplFileObject::SKIP_EMPTY); $tmpFile->setFlags(SplFileObject::DROP_NEW_LINE); $write = $tmpFile->fwrite($content); if (!is_null($write)) { $tmpFile->rewind(); while (!$tmpFile->eof()) { $row = $tmpFile->fgetcsv(); $isLast = $tmpFile->eof(); self::addRow($row, $i, $isLast, $result); $i++; } } } $result .= '</table>'; } else { $result .= $motopressCELang->CETableObjNoData; } $result .= '</div>'; return $result; }
/** * Get the csv file as a string. * * @return string */ public function asString() { $tmp = new \SplTempFileObject(); foreach ($this->data as $row) { $tmp->fputcsv($row, $this->delimiter); if ($this->lineEnding !== "\n") { $tmp->fseek(-1, \SEEK_CUR); $tmp->fwrite($this->lineEnding); } } # Find out how much data we have written $length = $tmp->ftell(); if ($length < 1) { return ""; } # Reset the internal pointer and return all the data we have written $tmp->fseek(0); return $tmp->fread($length); }
/** * @param string[] $endOfLineMap Associative array of file names and line * endings. Shell style globs using "*" are * allowed. * @param string[] $paths List of paths to search for files to * convert. If empty uses current/present * working directory from getcwd(). * @param string[] $excludedFiles List of files that should be excluded from * having line endings changed. * * @throws \DomainException * @throws \InvalidArgumentException * @throws PeolFileException * @throws PeolPathException * @return self */ public function convertFiles(array $endOfLineMap, array $paths = array(), array $excludedFiles = array()) { $paths = $paths ?: array(getcwd()); /** * @var string $path */ foreach ($paths as $path) { $path = $this->normalizePath($path); if (!is_readable($path) || !is_dir($path) || !is_writable($path)) { continue; } foreach ($endOfLineMap as $glob => $eol) { $filterItr = $this->getNewGlobFilter($path, $glob, $excludedFiles); if (empty($filterItr)) { return $this; } /** * @var \FilesystemIterator $fsi */ foreach ($filterItr as $fsi) { $fullName = $fsi->getRealPath(); if (!$fsi->isWritable()) { $mess = 'File is NOT writable: ' . $fullName; throw new PeolFileException($mess); } $file = $fsi->openFile('rb+', false); if (!$file->flock(LOCK_EX)) { $mess = 'Could NOT get write lock on ' . $fullName; throw new PeolFileException($mess); } try { $tempFile = new \SplTempFileObject(); foreach ($file as $line) { $this->convertString($line, $eol); $tempFile->fwrite($line); } $tempFile->fflush(); $tempFile->rewind(); $file->ftruncate(0); $file->fflush(); $file->rewind(); foreach ($tempFile as $line) { $file->fwrite($line); } $file->fflush(); } catch (\RuntimeException $exp) { $mess = 'File I/O failed on temp file for ' . $fullName; throw new PeolFileException($mess, 0, $exp); } unset($tempFile, $file); } } } return $this; }
/** * @param string $input * @return \SplTempFileObject */ protected function generateTempFileObject(string $input) : \SplTempFileObject { $temp = new \SplTempFileObject(); $temp->fwrite($input); return $temp; }