public static function getFileObjectFromContents($contents) { $fileobject = new \SplTempFileObject(); $fileobject->fwrite($contents); $fileobject->rewind(); return $fileobject; }
/** * 配列をCSVレコード風の文字列に変換して返します。 * @param string[] $fields * @return string */ public function convertToCSVRecord(array $fields) : string { $csv = new \SplTempFileObject(); $csv->fputcsv($fields); $csv->rewind(); return rtrim($csv->fgets(), "\r\n"); }
/** * */ private function initializeBeforeRead() { if ($this->generator === null) { $this->generator = $this->delegatedStream->read($this->blockSize); $this->resource = $this->generator->current(); $this->resource->rewind(); } }
/** * @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; }
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; }
<?php namespace com\github\gooh\InterfaceDistiller; include __DIR__ . '/../src/autoload.php'; $reflector = new \ReflectionClass('ConcreteFoo'); $methodIterator = new Filters\RegexMethodIterator(new Filters\NoImplementedMethodsIterator(new Filters\NoInheritedMethodsIterator(new Filters\NoOldStyleConstructorIterator(new Filters\NoMagicMethodsIterator(new \ArrayIterator($reflector->getMethods()))), $reflector)), '(^get)'); $distillate = new Distillate(); $distillate->setInterfaceName('MyInterface'); $distillate->setExtendingInterfaces('Iterator, SeekableIterator'); foreach ($methodIterator as $method) { $distillate->addMethod($method); } $file = new \SplTempFileObject(-1); $writer = new Distillate\Writer($file); $writer->writeToFile($distillate); $file->rewind(); $file->fpassthru();
/** * Export Job as Tmx File * * @param $jid * @param $jPassword * @param $sourceLang * @param $targetLang * * @return SplTempFileObject $tmpFile * */ public function exportJobAsCSV($jid, $jPassword, $sourceLang, $targetLang) { $tmpFile = new SplTempFileObject(15 * 1024 * 1024); $csv_fields = array("Source: {$sourceLang}", "Target: {$targetLang}"); $tmpFile->fputcsv($csv_fields); $result = getTranslationsForTMXExport($jid, $jPassword); foreach ($result as $k => $row) { $row_array = array($row['segment'], $row['translation']); $tmpFile->fputcsv($row_array); } $tmpFile->rewind(); return $tmpFile; }
public function doAction() { $data = CatUtils::getEditingLogData($this->jid, $this->password, true); $data = $data[0]; $csvHandler = new SplTempFileObject(-1); $csvHandler->setCsvControl(';'); $csv_fields = array("Job ID", "Segment ID", "Suggestion Source", "Words", "Match percentage", "Time-to-edit", "Post-editing effort", "HTER", "Segment", "Suggestion", "Translation", "MT QE", "ID translator", "Suggestion1-source", "Suggestion1-translation", "Suggestion1-match", "Suggestion1-origin", "Suggestion2-source", "Suggestion2-translation", "Suggestion2-match", "Suggestion2-origin", "Suggestion3-source", "Suggestion3-translation", "Suggestion3-match", "Suggestion3-origin", "Choosen-Suggestion", "Statistically relevant"); $csvHandler->fputcsv($csv_fields); foreach ($data as $d) { $statistical_relevant = $d['stats-valid'] == 'No' ? 0 : 1; $sid = $d['sid']; $sugg_source = $d['ss']; $rwc = $d['rwc']; $sugg_match = $d['sm']; $sugg_tte = $d['tte']; $pe_effort_perc = $d['pe_effort_perc']; $hter = $d['ter']; $segment = $d['source_csv']; $suggestion = $d['sug_csv']; $translation = $d['translation_csv']; $id_translator = $d['tid']; $s1_source = ""; $s2_source = ""; $s3_source = ""; $s1_translation = ""; $s2_translation = ""; $s3_translation = ""; $s1_match = ""; $s2_match = ""; $s3_match = ""; $s1_origin = ""; $s2_origin = ""; $s3_origin = ""; $mt_qe = $d['mt_qe']; if (!empty($d['sar'])) { $sar = json_decode($d['sar']); $s1_source = $sar[0]->segment; $s1_translation = $sar[0]->translation; $s1_match = $sar[0]->match; if (isset($sar[1])) { $s2_source = $sar[1]->segment; $s2_translation = $sar[1]->translation; $s2_match = $sar[1]->match; } if (isset($sar[2])) { $s3_source = $sar[2]->segment; $s3_translation = $sar[2]->translation; $s3_match = $sar[2]->match; } $s1_origin = substr($sar[0]->created_by, 0, 2) == 'MT' ? 'MT' : 'TM'; $s2_origin = substr($sar[1]->created_by, 0, 2) == 'MT' ? 'MT' : 'TM'; $s3_origin = substr($sar[2]->created_by, 0, 2) == 'MT' ? 'MT' : 'TM'; } $row_array = array($this->jid, $sid, $sugg_source, $rwc, $sugg_match, $sugg_tte, $pe_effort_perc, $hter, $segment, $suggestion, $translation, $mt_qe, $id_translator, $s1_source, $s1_translation, $s1_match, $s1_origin, $s2_source, $s2_translation, $s2_match, $s2_origin, $s3_source, $s3_translation, $s3_match, $s3_origin, $d['sp'], $statistical_relevant); $csvHandler->fputcsv($row_array); } $csvHandler->rewind(); foreach ($csvHandler as $row) { $this->content .= $row; } }
public function actionIndex() { $uploadedFile = CUploadedFile::getInstanceByName("blackListedFile"); if (isset($_GET['downloadSampleFile'])) { $headers = array("Mobilephone"); $contents = array(array("447123456789"), array("447123456455"), array("447123456321")); $tempFile = new SplTempFileObject(); $tempFile->fputcsv($headers); foreach ($contents as $currentLine) { $tempFile->fputcsv($currentLine); } $tempFile->rewind(); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=SampleFile.csv"); header("Pragma: no-cache"); header("Expires: 0"); $tempFile->fpassthru(); die; } if (isset($_POST['singleBlackList']) && !empty($_POST['singleBlackList'])) { $newMobileNum = new BlackListedMobile(); $newMobileNum->mobile_number = $_POST['singleBlackList']; $newMobileNum->queue_id = 1; if ($newMobileNum->save()) { Yii::app()->user->setFlash('success', '<strong>New blacklist mobile numberSaved!</strong>'); } else { Yii::app()->user->setFlash('error', '<strong>Error!</strong>' . CHtml::errorSummary($newMobileNum)); } } if (isset($_POST['massiveTextArea']) && !empty($_POST['massiveTextArea'])) { /*@TODO get total now , using randomQueue */ $queueName = $_POST['randomQueue'] ? $_POST['randomQueue'] : 'Task : upload - ' . rand(0, 9999); $criteriaJobQueue = new CDbCriteria(); $criteriaJobQueue->compare("queue_name", $queueName); $jobQueueModl = JobQueue::model()->find($criteriaJobQueue); /*@TODO $total_before*/ $total_before = 0; if (!$jobQueueModl) { $jobQueueModl = new JobQueue(); //@TODO declare above , $jobQueueModl->queue_name = $queueName; $jobQueueModl->save(false); //pre save } else { $criteriaTotalBefore = new CDbCriteria(); $criteriaTotalBefore->compare("queue_id", $jobQueueModl->queue_id); $total_before = BlackListedMobile::model()->count($criteriaTotalBefore); } /*write posted textarea to file*/ $tp = tempnam(Yii::getPathOfAlias('application.data'), "tempWrite"); $tempName = $tp . '.csv'; $linecount = 0; $tempContainer2 = explode("\n", $_POST['massiveTextArea']); $tempContainer2 = array_filter($tempContainer2); $linecount = count($tempContainer2); file_put_contents($tempName, implode(PHP_EOL, $tempContainer2)); // $handle = fopen($tempName, "r"); // while(!feof($handle)){ // $line = fgets($handle); // ++$linecount; // } // fclose($handle); $jobQueueModl->filename = $tempName; //ignore this $jobQueueModl->status = JobQueue::$JOBQUEUE_STATUS_PRELOADED; /*check number files' number of line*/ // Total_records , $jobQueueModl->total_records = $linecount; $jobQueueModl->processed_record = $linecount; /*update job queue record*/ if ($jobQueueModl->save()) { $filePath = $tempName; /*load to database*/ $tempFile2 = tempnam(__DIR__, "tempContainer"); $appendCommand = sprintf('cat "%s" | gawk \'{print $0",0%s"}\' > "%s" ', $filePath, $jobQueueModl->queue_id, $tempFile2); system($appendCommand); system("mv \"{$tempFile2}\" \"{$filePath}\""); $sqlCommand = <<<EOL LOAD DATA LOCAL INFILE "%s" INTO TABLE black_listed_mobile FIELDS TERMINATED BY "%s" LINES TERMINATED BY "%s" IGNORE 0 LINES (mobile_number,queue_id) EOL; $sqlCommand = sprintf($sqlCommand, $filePath, ',', '\\n'); $mainCommand = "mysql --user=dncsyste_dnc --password=hitman052529 --database=dncsyste_dnc -e '{$sqlCommand}'"; exec($mainCommand); $criteriaTotalBefore = new CDbCriteria(); $criteriaTotalBefore->compare("queue_id", $jobQueueModl->queue_id); /* $total_now*/ $total_now = BlackListedMobile::model()->count($criteriaTotalBefore); if (Yii::app()->request->isAjaxRequest) { header("Content-Type: application/json"); $numOfInsertedData = $total_now - $total_before; $numOfInsertedData = $numOfInsertedData <= 0 ? 0 : $numOfInsertedData; $numOfDeletedData = $linecount - ($total_now - $total_before); $numOfDeletedData = $numOfDeletedData <= 0 ? 0 : $numOfDeletedData; $jsonResult = array("numOfInsertedData" => $numOfInsertedData, "numOfDeletedData" => $numOfDeletedData); echo json_encode($jsonResult); die; } else { Yii::app()->user->setFlash('success', '<strong>File Imported!</strong>You have successfully imported new blacklisted mobile number. '); } } else { Yii::app()->user->setFlash('error', CHtml::errorSummary($newQueueFile)); } } if ($uploadedFile) { set_time_limit(0); $newFileLocation = Yii::getPathOfAlias("application.uploaded_files") . DIRECTORY_SEPARATOR . rand(0, 9999) . '-' . $uploadedFile->name; //save new queue file $newQueueFile = new JobQueue(); $uploadedFile->saveAs($newFileLocation); $newQueueFile->queue_name = "Task : " . $uploadedFile->name . ' - ' . rand(0, 9999); $newQueueFile->filename = $newFileLocation; $newQueueFile->status = JobQueue::$JOBQUEUE_STATUS_PRELOADED; /*check number files' number of line*/ $linesTotal = 0; $handle = fopen($newQueueFile->filename, "r"); while (!feof($handle)) { $line = fgets($handle); ++$linesTotal; } fclose($handle); $newQueueFile->total_records = $linesTotal; $newQueueFile->processed_record = $linesTotal; if ($newQueueFile->save()) { $filePath = $newQueueFile->filename; $tempFile2 = tempnam(__DIR__, "tempContainer"); $appendCommand = sprintf('gawk \'{print $0",0%s"}\' "%s" > "%s"', $newQueueFile->queue_id, $filePath, $tempFile2); system($appendCommand); system("mv \"{$tempFile2}\" \"{$filePath}\""); /*append queue identification for blacklist*/ $rawContents = file_get_contents($filePath); // print_r( explode("\n",$rawContents) ); // die(); $sqlCommand = <<<EOL LOAD DATA LOCAL INFILE "%s" INTO TABLE black_listed_mobile FIELDS TERMINATED BY "%s" LINES TERMINATED BY "%s" IGNORE 0 LINES (mobile_number,queue_id) EOL; $sqlCommand = sprintf($sqlCommand, $filePath, ',', '\\n'); $mainCommand = "mysql --user=dncsyste_dnc --password=hitman052529 --database=dncsyste_dnc -e '{$sqlCommand}'"; exec($mainCommand); $undoLink = "<a href='" . Yii::app()->getBaseUrl(true) . "/blacklist/delete?queue_id={$newQueueFile->queue_id}' onClick='return confirm(\"Are you sure you want to delete this ?\")'> Undo Action </a>"; Yii::app()->user->setFlash('success', '<strong>File Imported!</strong>You have successfully imported new blacklisted mobile number. ' . $undoLink); } else { Yii::app()->user->setFlash('error', CHtml::errorSummary($newQueueFile)); } } $this->render('index'); }
public function actionExportpi() { $piSitesId = array("6", "10", "3", "7", "14", "16", "17", "18", "19"); $accountIds = implode(",", $piSitesId); $fileName = date("Y-m-d") . '-All-PI-sites-entry'; header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private", false); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"{$fileName}.csv\";"); header("Content-Transfer-Encoding: binary"); $results = Yii::app()->db->createCommand("SELECT * FROM claimrecord WHERE account_id IN ({$accountIds}) ORDER BY date_created DESC")->queryAll(); //write the contents to csv and passthru it $tempExportCsv = new SplTempFileObject(); foreach ($results as $currentLine) { $curArr = json_decode($currentLine['claimData'], true); $curArr = array_values($curArr); /*check if mobile number exists in the blacklist record*/ $tempExportCsv->fputcsv($curArr); } $tempExportCsv->rewind(); $tempExportCsv->fpassthru(); }
/** * 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 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; }
/** * 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; }