我收到以下错误:
注意:未定义的偏移量:第101行/home/content/53/7382753/html/Summer/wootsummer.php中的1
我的代码http://obsidianpunch.com/Summer
违规行是$topnow=$top[$countforme];
但是定义了$ top和$ countforme,所以我不确定为什么会导致错误。任何建议都非常受欢迎。
对于上下文,它出现的片段(wootsummer.php)如下所示。
<html>
<body>
<?php
error_reporting(E_ALL);
set_time_limit (0);
$urls=explode("\n", $_POST['url']);
//$proxies=explode("\n", $_POST['proxy']);
$target=$_POST['target'];
$allurls=count($urls);
//$allproxies=count($proxies);
//use the new tool box
require "ToolBoxA4.php";
echo "before loops all ok";
for ( $counter = 0; $counter < $allurls; $counter++) {
//for ( $count = 0; $count <= $allproxies; $count++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$urls[$counter]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_exec ($ch);
$curl_scraped_page=curl_exec($ch);
echo "after curl ok";
//call the new function parseA1
$arrOut = parseA1 ($curl_scraped_page);
$curl_scraped_page=strtolower($curl_scraped_page);
$haystack=$curl_scraped_page;
if (strlen(strstr($haystack,$target))>0) {
$FileName = abs(rand(0,100000));
$FileHandle = fopen($FileName, 'w') or die("can't open file");
fwrite($FileHandle, $curl_scraped_page);
echo "after fwrite ok";
$hostname="**************";
$username="************";
$password="******";
$dbname="**********";
$usertable="************";
$con=mysql_connect($hostname,$username, $password) or die ("<html><script language='JavaScript'>alert('Unable to connect to database! Please try again later.'),history.go(-1)</script></html>");
mysql_select_db($dbname ,$con);
$right = explode(",", $arrOut[0]);
$top = explode(",", $arrOut[1]);
for ( $countforme = 0; $countforme <= 5; $countforme++) {
$topnow=$top[$countforme];
$query = "INSERT INTO *********** (time, ad1) VALUES ('$FileName','$topnow')";
mysql_query($query) or die('Error, insert query failed');
echo "after mysql ok";
}
for ( $countforme = 0; $countforme <= 15; $countforme++) {
$rightnow = $right[$countforme];
$query = "INSERT INTO *********** (time, ad1) VALUES ('$FileName','$rightnow')";
mysql_query($query) or die('Error, insert query failed');
}
mysql_close($con);
echo '$FileNameSQL';
fclose($FileHandle);
}
curl_close($ch);
}
?>
</body>
</html>
上面引用的toolboxA4.php如下所示。
<?php
function strTrim ($strIn, $cutA, $cutB){
//keeps what is between $cutA and $cutB
$pieces = explode($cutA, $strIn, 2);
$str1 = $pieces[1]; //keep everything after cutA
$pieces = explode($cutB, $str1, 2);
$strOut = $pieces[0]; //keep everything before cutB
return $strOut;
}
function arrWords ($strIn, $theStart, $theEnd){
//returns what is between $theStart and $theEnd
$cutA = $theStart;
$pieces = explode($cutA, $strIn);
$pieces[0] = ""; //discard the first piece
$cutB = $theEnd;
foreach ($pieces as $key => $value) {
$arrB = explode($cutB, $value, 2);
$arrOut[$key] = $arrB[0]; //keep everything before cutB
}
return $arrOut;
}
function arrElems ($strIn, $tag){
//returns what is between <$tag> and </$tag>
$cutA = "<$tag>";
$pieces = explode($cutA, $strIn);
$pieces[0] = ""; //discard the first piece
$cutB = "</$tag>";
foreach ($pieces as $key => $value) {
$arrB = explode($cutB, $value, 2);
$arrOut[$key] = $arrB[0]; //keep everything before cutB
}
return $arrOut;
}
function arrElemAB ($strIn, $tagA, $tagB){
//returns what is between <$tagA><$tagB> and </$tagB></$tagA>
$cutA = "<$tagA><$tagB>";
$pieces = explode($cutA, $strIn);
$pieces[0] = ""; //discard the first piece
$cutB = "</$tagB></$tagA>";
foreach ($pieces as $key => $value) {
$arrB = explode($cutB, $value, 2);
$arrOut[$key] = $arrB[0]; //keep everything before cutB
}
return $arrOut;
}
function DropTag ($strIn, $tag){
//drops <$tag> and </$tag>. $strIn can be a string or an array of strings. $strOut is same type as $strIn.
$strA = str_replace("<$tag>", "", $strIn);
$strOut = str_replace("</$tag>", "", $strA);
return $strOut;
}
function arrCompress ($arrIn){
//deletes empty array entries
if(!empty($arrIn)){
foreach ($arrIn as $key => $value) {
if ($value == "") {
unset($arrIn[$key]);
}
}
$arrIn = array_values($arrIn);
}
return $arrIn;
}
function arrDeDup ($arrIn){
//changes duplicate array entries to empty string
if(!empty($arrIn)){
foreach ($arrIn as $key1 => $value1) {
foreach ($arrIn as $key2 => $value2) {
if ($key1 != $key2 and $value1 == $value2) {
$arrIn[$key2] = "";
}
}
}
}
return $arrIn;
}
function arrToString ($arrIn){
//turns an array into a string
$strOut = "";
if(!empty($arrIn)){
foreach ($arrIn as $value) {
$strOut .= "$value<br>";
}
}
return $strOut;
}
function arrContains ($arrIn, $strIn){
//deletes array entries that do not contain $strIn.
foreach ($arrIn as &$value) {
if (stripos($value, $strIn) === false) {
$value = "";
}
}
return $arrIn;
}
function arrNotContain ($arrIn, $strIn){
//deletes array entries that contain $strIn.
foreach ($arrIn as &$value) {
if (stripos($value, $strIn) !== false) {
$value = "";
}
}
return $arrIn;
}
function parseStrA1 ($strToParse){
//drop some tags
$strA = DropTag ($strToParse, "b");
//split the file into Top and RHS
$strTOP = strTrim ($strA, "<body", "<div id=rhs_block");
$strRHS = strTrim ($strA, "<div id=rhs_block", ">See your ad here");
//get the elements using tags
$arrTOP = arrElemAB ($strTOP, "span", "cite");
$arrRHS = arrElems ($strRHS, "cite");
//remove empty elements
$arrTOP = arrCompress ($arrTOP);
$arrRHS = arrCompress ($arrRHS);
//output results
$strA = "TOP<br>"
. arrToString ($arrTOP)
. "<br><br>RHS<br>"
. arrToString ($arrRHS);
return $strA;
}
function parseA1 ($strToParse){
//drop some tags
$strA = DropTag ($strToParse, "b");
//split the file into Top and RHS
$strTOP = strTrim ($strA, "<body", "<div id=rhs_block");
$strNAT = strTrim ($strA, "<body", "<div id=rhs_block");
$strRHS = strTrim ($strA, "<div id=rhs_block", ">See your ad here");
//get the elements using tags
$arrTOP = arrElemAB ($strTOP, "span", "cite");
$arrRHS = arrElems ($strRHS, "cite");
//get the links
$arrNAT = arrWords ($strNAT, '<a href="http://', '" ');
$arrNAT = arrNotContain ($arrNAT, "oogle");
//remove empty and duplicate elements
$arrTOP = arrCompress ($arrTOP);
$arrRHS = arrCompress ($arrRHS);
$arrNAT = arrDeDup ($arrNAT);
$arrNAT = arrCompress ($arrNAT);
//combine arrays into strings, comma separated values
$arrOut[0] = implode(",", $arrRHS);
$arrOut[1] = implode(",", $arrTOP);
$arrOut[2] = implode(",", $arrNAT);
return $arrOut;
}
?>
答案 0 :(得分:1)
以下一系列代码假设您的explode将至少有6个项目,否则在尝试访问索引时访问数组时会失败,因为该索引将不存在。
$top = explode(",", $arrOut[1]);
以上一行至少需要5个逗号才能创建6个元素
当你像这样循环:
for ( $countforme = 0; $countforme <= 5; $countforme++) {
$topnow=$top[$countforme];
...
如果您达到的$ countforme值大于$ top - 1的长度,则会失败。
您是否考虑过将for循环更改为更传统的内容,例如:
$top = explode(",", $arrOut[1]);
for ( $countforme = 0; $countforme < count($top); $countforme++) {
$topnow=$top[$countforme];
...
答案 1 :(得分:1)
问题是你正在将$ top数组从0迭代到5,而不知道数组是否实际包含这些索引的元素。所以快速解决方法是:
foreach($top as $topnow)
{
$query = "INSERT INTO *********** (time, ad1) VALUES ('$FileName','$topnow')";
mysql_query($query) or die('Error, insert query failed');
echo "after mysql ok";
}
答案 2 :(得分:0)
就在这之前
for ( $countforme = 0; $countforme <= 5; $countforme++) {
你能做到吗
echo count($top);
只是为了证明该数组中有&lt; = 5个值