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');
    }
Пример #2
0
 public static function getFileObjectFromContents($contents)
 {
     $fileobject = new \SplTempFileObject();
     $fileobject->fwrite($contents);
     $fileobject->rewind();
     return $fileobject;
 }
Пример #3
0
 /**
  * @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);
 }
Пример #4
0
 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;
     }, '𩸽']];
 }
Пример #5
0
 /**
  * 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;
 }
Пример #6
0
 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);
 }
Пример #7
0
 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;
 }
Пример #8
0
 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;
     }
 }
Пример #9
0
    /**
     * 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;
    }
Пример #10
0
 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;
 }
Пример #12
0
 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;
 }
Пример #13
0
 /**
  * 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;
 }
Пример #14
0
 /**
  * @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);
 }
Пример #15
0
 /**
  * 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;
     }
 }
Пример #16
0
 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();
     }
 }
Пример #17
0
 /**
  * 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;
 }
Пример #18
0
 /**
  * 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);
 }
Пример #19
0
 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;
 }
Пример #20
0
 /**
  * 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);
 }
Пример #21
0
 /**
  * @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;
 }