$settings_filename = make_settings_filename($token); } else { if ($web_initiated === false) { if (!$settings_filename || !$output_dirname) { FUPSBase::exit_err_s('Fatal error: no ' . (!$settings_filename ? 'settings' : 'output') . ' filename specified in commandline arguments.', __FILE__, __METHOD__, __LINE__); } } else { FUPSBase::exit_err_s('Fatal error: $web_initiated is uninitialised after parsing commandline arguments (this error should never occur, and indicates a bug).', __FILE__, __METHOD__, __LINE__); } } } $forum_type = FUPSBase::read_forum_type_from_settings_file_s($settings_filename); $valid_forum_types = FUPSBase::get_valid_forum_types(); if (!isset($valid_forum_types[$forum_type])) { FUPSBase::exit_err_s('Fatal error: missing or invalid forum_type in settings file "' . $settings_filename . '": "' . $forum_type . '".', __FILE__, __METHOD__, __LINE__); } $forum_type_caps = $valid_forum_types[$forum_type]; require_once __DIR__ . '/classes/C' . $forum_type_caps . '.php'; if ($chained) { $token_or_settings_filename = $web_initiated ? $token : $settings_filename; $FUPS = unserialize(file_get_contents(make_serialize_filename($token_or_settings_filename))); } else { if ($web_initiated) { $params = array('token' => $token); } else { $params = array('settings_filename' => $settings_filename, 'output_dirname' => $output_dirname, 'quiet' => $quiet); } $class = $forum_type_caps . 'FUPS'; $FUPS = new $class($web_initiated, $params); } $FUPS->run();
protected function check_do_chain() { if (time() - $this->start_time > $this->FUPS_CHAIN_DURATION) { $serialize_filename = make_serialize_filename($this->web_initiated ? $this->token : $this->settings_filename); if ($this->dbg) { $this->write_err('Set $serialize_filename to "' . $serialize_filename . '".'); } if (!file_put_contents($serialize_filename, serialize($this))) { $this->exit_err('file_put_contents returned false.', __FILE__, __METHOD__, __LINE__); } $args = array('chained' => true); if ($this->web_initiated) { $args['token'] = $this->token; } else { $args['settings_filename'] = $this->settings_filename; $args['output_dirname'] = $this->output_dirname; $args['quiet'] = $this->quiet; } curl_close($this->ch); // So we save the cookie file to disk for the chained process. $cmd = make_php_exec_cmd($args); $this->write_status('Chaining next process.'); if ($this->dbg) { $this->write_err('Chaining process: about to run command: ' . $cmd); } if (!try_run_bg_proc($cmd)) { $this->exit_err('Apologies, the server encountered a technical error: it was unable to initiate a chained background process to continue the task of scraping, sorting and finally presenting your posts. The command used was:' . PHP_EOL . PHP_EOL . $cmd . PHP_EOL . PHP_EOL . 'Any output was:' . PHP_EOL . implode(PHP_EOL, $output) . PHP_EOL . PHP_EOL . 'You might like to try again.', __FILE__, __METHOD__, __LINE__); } if ($this->dbg) { $this->write_err('Exiting parent chaining process.'); } exit; } }
$fp = @fopen($settings_filename, "x"); if ($fp !== false) { break; } } if ($fp === false) { $err = 'Apologies, the server encountered a technical error: it was unable to generate a unique token to be associated with your request after ' . FUPS_MAX_TOKEN_ATTEMPTS . ' attempts. You might like to try again or <a href="' . FUPS_CONTACT_URL . '">contact me</a> about this error.'; } else { foreach (array_keys($_POST) as $setting) { $value = $_POST[$setting]; fwrite($fp, $setting . '=' . $value . PHP_EOL); } fclose($fp); $status_filename = make_status_filename($token); $errs_filename = make_errs_filename($token); $serialize_filename = make_serialize_filename($token); if (file_put_contents($status_filename, 'Starting up.') === false) { if ($file_errs) { $file_errs .= ' '; } $file_errs .= 'Error: unable to write to the status file.'; } if (file_put_contents($errs_filename, '') === false) { if ($file_errs) { $file_errs .= ' '; } $file_errs .= 'Error: unable to write to the error file.'; } if (file_put_contents($serialize_filename, '') === false) { if ($file_errs) { $file_errs .= ' ';
if (is_array($output_info)) { $output_dir = null; foreach ($output_info as $opv) { try_delete_file($opv['filepath'], '"' . $opv['filepath'] . '"', false, $err, $num_files_deleted, false); $output_dir = dirname($opv['filepath']); } @rmdir($output_dir); } } if (validate_token($token, $err)) { try_delete_file(make_settings_filename($token), 'settings', true, $err, $num_files_deleted); try_delete_file(make_status_filename($token), 'status', false, $err, $num_files_deleted); try_delete_file(make_errs_filename($token), 'error', false, $err, $num_files_deleted); try_delete_file(make_errs_admin_filename($token), 'errors (admin)', false, $err, $num_files_deleted, false); try_delete_file(make_output_info_filename($token), 'output info', false, $err, $num_files_deleted, false); try_delete_file(make_serialize_filename($token), 'serialisation', true, $err, $num_files_deleted); try_delete_file(make_cookie_filename($token), 'cookie', true, $err, $num_files_deleted, false); try_delete_file(make_cancellation_filename($token), 'cancellation', true, $err, $num_files_deleted, false); } } function try_delete_file($filename, $name, $sensitive, &$err, &$num_files_deleted, $add_err_if_file_not_present = true) { global $fups_url_homepage; if (!is_file($filename)) { if ($add_err_if_file_not_present) { $err .= $err ? ' Another' : 'An'; $err .= ' error occurred: the ' . $name . ' file does not exist on disk; possibly you have already deleted it or it was never created in the first place.'; } } else { if (!unlink($filename)) { $err .= $err ? ' Another' : 'An';