VIP 2 by Covax

Работа конечно адская, на такое китайцев сажать нужно.
Уже почти вторую функцию доделал, чуть позже выложу.

 
Функции очень длинные, и много повторяющихся фрагментов. Мог где-нибудь допустить ошибку. Но для понимания принципа работы сгодится.
PHP:
function parse_form ($result) {
	if (strlen ($result) !== 0) {
		$res = strtolower ($result);
		$startPos = 0;
		$fIndex = 0;
		while (true) {
			$fStart = strpos ($res, '<input', $startPos);
			if ($fStart === false) {
				break;
			}

			$fSym = substr ($result, $fStart + 6, 1);
			if($fSym!==' ' && $fSym!=='>' && $fSym!=="\t" && $fSym!=="\n") {
				$startPos = $fStart + 6;
				continue;
			}
			else {
				if ($fSym === '>') {
					$startPos = $fStart + 6;
					continue;
				}
				else {
					$nextPos = $fStart + 6;
					$fStartGt = strpos ($result, '>', $nextPos);
					if ($fStartGt !== false) {
						$tagAttrStr = trim (substr ($result, $nextPos, $fStartGt - $nextPos));
						$tagAttrLen = strlen ($tagAttrStr);
						if ($tagAttrLen === 0) {
							$startPos = $fStartGt + 1;
							continue;
						}
						else {
							$tagAttrPos = strpos (strtolower ($tagAttrStr), 'type=');
							if ($tagAttrPos !== false) {
								$attrValFirstSym = substr ($tagAttrStr, $tagAttrPos + 5, 1);
								if ($attrValFirstSym === '\'') {
									$attrValEndPos = strpos ($tagAttrStr, '\'', $tagAttrPos + 6);
									if ($attrValEndPos !== false) {
										$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
										$fElements['input'][$fIndex]['type'] = $tagAttrValue;
									}
								}
								else {
									if ($attrValFirstSym === '"') {
										$attrValEndPos = strpos ($tagAttrStr, '"', $tagAttrPos + 6);
										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
											$fElements['input'][$fIndex]['type'] = $tagAttrValue;
										}
									}
									else {
										$attrValEndPos = strpos ($tagAttrStr, ' ', $tagAttrPos + 6);
										if ($attrValEndPos === false) {
											$attrValEndPos = $tagAttrLen;
										}

										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 5, $attrValEndPos - $tagAttrPos - 5);
											$fElements['input'][$fIndex]['type'] = $tagAttrValue;
										}
									}
								}
							}

							$tagAttrPos = strpos (strtolower ($tagAttrStr), 'name=');
							if ($tagAttrPos !== false) {
								$attrValFirstSym = substr ($tagAttrStr, $tagAttrPos + 5, 1);
								if ($attrValFirstSym === '\'') {
									$attrValEndPos = strpos ($tagAttrStr, '\'', $tagAttrPos + 6);
									if ($attrValEndPos !== false) {
										$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
										$fElements['input'][$fIndex]['name'] = $tagAttrValue;
									}
								}
								else {
									if ($attrValFirstSym === '"') {
										$attrValEndPos = strpos ($tagAttrStr, '"', $tagAttrPos + 6);
										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
											$fElements['input'][$fIndex]['name'] = $tagAttrValue;
										}
									}
									else {
										$attrValEndPos = strpos ($tagAttrStr, ' ', $tagAttrPos + 6);
										if ($attrValEndPos === false) {
											$attrValEndPos = $tagAttrLen;
										}

										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 5, $attrValEndPos - $tagAttrPos - 5);
											$fElements['input'][$fIndex]['name'] = $tagAttrValue;
										}
									}
								}
							}

							$tagAttrPos = strpos (strtolower ($tagAttrStr), 'value=');
							if ($tagAttrPos !== false) {
								$attrValFirstSym = substr ($tagAttrStr, $tagAttrPos + 6, 1);
								if ($attrValFirstSym === '\'') {
									$attrValEndPos = strpos ($tagAttrStr, '\'', $tagAttrPos + 7);
									if ($attrValEndPos !== false) {
										$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 7, $attrValEndPos - $tagAttrPos - 7);
										$fElements['input'][$fIndex]['value'] = $tagAttrValue;
									}
								}
								else {
									if ($attrValFirstSym === '"') {
										$attrValEndPos = strpos ($tagAttrStr, '"', $tagAttrPos + 7);
										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 7, $attrValEndPos - $tagAttrPos - 7);
											$fElements['input'][$fIndex]['value'] = $tagAttrValue;
										}
									}
									else {
										$attrValEndPos = strpos ($tagAttrStr, ' ', $tagAttrPos + 7);
										if ($attrValEndPos === false) {
											$attrValEndPos = $tagAttrLen;
										}

										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
											$fElements['input'][$fIndex]['value'] = $tagAttrValue;
										}
									}
								}
							}

							$startPos = $fStartGt + 1;
							++$fIndex;
							continue;
						}
	
						continue;
					}
	
					break;
				}
	
				continue;
			}
		}

		$startPos = 0;
		$fIndex = 0;
		while (true) {
			$fStart = strpos ($res, '<textarea', $startPos);
			if ($fStart === false) {
				break;
			}

			$fSym = substr ($result, $fStart + 9, 1);
			if ((((($fSym !== ' ' AND $fSym !== '>') AND $fSym !== '	') AND $fSym !== '
') AND $fSym !== '
')) {
				$startPos = $fStart + 9;
				continue;
			}
			else {
				if ($fSym === '>') {
					$startPos = $fStart + 9;
					continue;
				}
				else {
					$nextPos = $fStart + 6;
					$fStartGt = strpos ($result, '>', $nextPos);
					if ($fStartGt !== false) {
						$tagAttrStr = trim (substr ($result, $nextPos, $fStartGt - $nextPos));
						$tagAttrLen = strlen ($tagAttrStr);
						if ($tagAttrLen === 0) {
							$startPos = $fStartGt + 1;
							continue;
						}
						else {
							$tagAttrPos = strpos (strtolower ($tagAttrStr), 'name=');
							if ($tagAttrPos !== false) {
								$attrValFirstSym = substr ($tagAttrStr, $tagAttrPos + 5, 1);
								if ($attrValFirstSym === '\'') {
									$attrValEndPos = strpos ($tagAttrStr, '\'', $tagAttrPos + 6);
									if ($attrValEndPos !== false) {
										$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
										$fElements['textarea'][$fIndex]['name'] = $tagAttrValue;
									}
								}
								else {
									if ($attrValFirstSym === '"') {
										$attrValEndPos = strpos ($tagAttrStr, '"', $tagAttrPos + 6);
										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
											$fElements['textarea'][$fIndex]['name'] = $tagAttrValue;
										}
									}
									else {
										$attrValEndPos = strpos ($tagAttrStr, ' ', $tagAttrPos + 6);
										if ($attrValEndPos === false) {
											$attrValEndPos = $tagAttrLen;
										}

										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 5, $attrValEndPos - $tagAttrPos - 5);
											$fElements['textarea'][$fIndex]['name'] = $tagAttrValue;
										}
									}
								}
							}

							$startPos = $fStartGt + 1;
							++$fIndex;
							continue;
						}

						continue;
					}

					break;
				}

				continue;
			}
		}

		$startPos = 0;
		$fIndex = 0;
		while (true) {
			$fStart = strpos ($res, '<select', $startPos);
			if ($fStart === false) {
				break;
			}

			$fSym = substr ($result, $fStart + 7, 1);
			if ((((($fSym !== ' ' AND $fSym !== '>') AND $fSym !== '	') AND $fSym !== '
') AND $fSym !== '
')) {
				$startPos = $fStart + 8;
				continue;
			}
			else {
				$nextPos = $fStart + 7;
				$fStartGt = strpos ($res, '>', $nextPos);
				if ($fStartGt !== false) {
					$fEnd = strpos ($res, '</select', $fStartGt + 1);
					if ($fEnd !== false) {
						$fEndGt = strpos ($res, '>', $fEnd + 1);
						if ($fEndGt === false) {
							$fEndGt = strlen ($result);
						}
					}
					else {
						$fEndGt = strlen ($result);
					}

					$tagAttrStr = trim (substr ($result, $nextPos, $fStartGt - $nextPos));
					$tagAttrLen = strlen ($tagAttrStr);
					if ($tagAttrLen === 0) {
						$startPos = $fEndGt;
						continue;
					}
					else {
						$tagAttrPos = strpos (strtolower ($tagAttrStr), 'name=');
						if ($tagAttrPos !== false) {
							$attrValFirstSym = substr ($tagAttrStr, $tagAttrPos + 5, 1);
							if ($attrValFirstSym === '\'') {
								$attrValEndPos = strpos ($tagAttrStr, '\'', $tagAttrPos + 6);
								if ($attrValEndPos !== false) {
									$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
									$tagAttrValue_2 = $tagAttrValue;
								}
							}
							else {
								if ($attrValFirstSym === '"') {
									$attrValEndPos = strpos ($tagAttrStr, '"', $tagAttrPos + 6);
									if ($attrValEndPos !== false) {
										$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
										$tagAttrValue_2 = $tagAttrValue;
									}
								}
								else {
									$attrValEndPos = strpos ($tagAttrStr, ' ', $tagAttrPos + 6);
									if ($attrValEndPos === false) {
										$attrValEndPos = $tagAttrLen;
									}

									if ($attrValEndPos !== false) {
										$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 5, $attrValEndPos - $tagAttrPos - 5);
										$tagAttrValue_2 = $tagAttrValue;
									}
								}
							}
						}

						if (trim ($tagAttrValue_2) === '') {
							$startPos = $fEndGt;
							$tagAttrValue_2 = '';
							continue;
						}
						else {
							$fElements['select'][$fIndex]['name'] = $tagAttrValue;
							$select = substr ($result, $fStartGt + 1, $fEnd - $fStartGt - 1);
							$optionOffsetPos = 0;
							$name = 0;
							$optionStartPos = strpos (strtolower ($select), '<option', $optionOffsetPos);
							if ($optionStartPos !== false) {
								$optionStartPosGt = strpos (strtolower ($select), '>', $optionStartPos + 1);
								if ($optionStartPosGt === false) {
								
								}

								$tagAttrStr = substr ($select, $optionStartPos + 7, $optionStartPosGt - $optionStartPos - 7);
								$tagAttrPos = strpos (strtolower ($tagAttrStr), 'value=');
								$tagAttrPos = strpos (strtolower ($tagAttrStr), 'value=');
								if ($tagAttrPos !== false) {
									$attrValFirstSym = substr ($tagAttrStr, $tagAttrPos + 6, 1);
									if ($attrValFirstSym === '\'') {
										$attrValEndPos = strpos ($tagAttrStr, '\'', $tagAttrPos + 7);
										if ($attrValEndPos !== false) {
											$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 7, $attrValEndPos - $tagAttrPos - 7);
											$optionAttrValue = $tagAttrValue;
										}
									}
									else {
										if ($attrValFirstSym === '"') {
											$attrValEndPos = strpos ($tagAttrStr, '"', $tagAttrPos + 7);
											if ($attrValEndPos !== false) {
												$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 7, $attrValEndPos - $tagAttrPos - 7);
												$optionAttrValue = $tagAttrValue;
											}
										}
										else {
											$attrValEndPos = strpos ($tagAttrStr, ' ', $tagAttrPos + 7);
											if ($attrValEndPos === false) {
												$attrValEndPos = $tagAttrLen;
											}

											if ($attrValEndPos !== false) {
												$tagAttrValue = substr ($tagAttrStr, $tagAttrPos + 6, $attrValEndPos - $tagAttrPos - 6);
												$optionAttrValue = $tagAttrValue;
											}
										}
									}
								}

								if (trim ($optionAttrValue) === '') {
									$optionEndPos = strpos (strtolower ($select), '</option', $optionStartPosGt + 1);
									if ($optionEndPos !== false) {
										$optionEndPosGt = strpos (strtolower ($select), '<', $optionEndPos + 1);
										if ($optionEndPosGt === false) {
											$optionEndPosGt = $optionEndPos = strlen ($select);
										}
									}
									else {
										$optionEndPosGt = $optionEndPos = strlen ($select);
									}

									$optionAttrValue = substr ($select, $optionStartPosGt + 1, $optionEndPos - $optionStartPosGt - 1);
									$optionOffsetPos = $optionEndPosGt;
								}
								else {
									$optionOffsetPos = $optionStartPosGt;
								}

								$fElements['select'][$fIndex]['value'][$name] = $optionAttrValue;
								++$name;
								$optionAttrValue = '';
							}

							++$fIndex;
							$startPos = $fEndGt;
							$tagAttrValue_2 = '';
							continue;
						}
	
						continue;
					}

					continue;
				}

				break;
			}
		}
	}
	else {
		return false;
	}

	if (isset ($fElements)) {
		return $fElements;
	}
	else {
		return false;
	}
}
 
Функции очень длинные, и много повторяющихся фрагментов. Мог где-нибудь допустить ошибку. Но для понимания принципа работы сгодится.
Это к чему??? Можешь что то улучшить - улучши да выложи - чтоб затестили да поблагодарили. А этот код кому нужен???
 
@xforumer: Я не понял, это ты что ли обфускатор "переводишь" ??? И нам тут описываешь трудности понимания кода? Оффтопишь имхо
 
Я где-то написал о трудностях понимания?
Я написал, что функции длинные, и поэтому возможны ошибки.
А насчет улучшения идеи уже есть. Но не все сразу.
Если считаете, что я зря трачу время, то так и скажите, буду делать тогда только для себя тихо сам с собой.
 
если целый день дебажить скрипт можно тронутся наверное
мне посты с кодом не мешают так сильно;)
тем более может кому и пригодится
 
Лови штатный мануал в аттаче
Старый сет.ини проканает(совместима вниз), но ты тем самым отсекаешь самые вкусные примочки второй версии.
1)Изменена морда и структура. Логи и тмп не в корне, а в папках.
2)Конфиг оверлейного типа, он перестал весь грузиться в память. Как результат, стало меньше жрать памяти и заглатывать больше базы. У меня например на 32м норм пашет, где раньше 256 было мало. Ну и надстройка конфига может быть переписана "на лету".
3)Таск можно замкнуть в кольцо.
4)Спамит кроме ПОСТ также и ГЕТ
5)Самопроверка конфига. Если обосраться, то он автоматом поправит. И ваще конфиг стало невозможно запороть.
6)Главное - радикально изменена логика анализа формы. Полагаю, все последующие версии будут основаны именно на этой логике и скорее всего спамит-3 тоже туда придет
 
Будем ждать, когда ты идеи воплотишь.... :)
 
Я тут смотрю и гадаю, какой же этой спамлке нужен проц для беганья по базе! Неужто Core2Duo Extreme?!! Напишите, у кого какой проц и как скрипт при нём бегает и как ведут себя потоки!!!

Core2Duo
ram 2g
50 потоков с проксями - дохнут мах 10 мин
 
Назад
Сверху