PDA

View Full Version : مشکل در بررسی کننده لینک (Curl & file_get_contents)



binboy
یک شنبه 14 آذر 1389, 10:52 صبح
سلام
دوتا کد دارم که هر دو ارور میده. لطفا کمک کنید. کده هم برای چک کردن وجود یک لینک در وب سایت مقابل است.
اولی: Curl. لینک مقاله: http://www.merchantos.com/makebeta/p...inks-with-php/
ارور:

Error, insert query failed

<?php
//connect to database
$hostname = 'localhost';
$dbname = 'newdb';
$username = 'root';
$password = '';

// Let's connect to host
mysql_connect($hostname, $username, $password) or DIE('Connection to host is failed, perhaps the service is down!');
// Select the database
mysql_select_db($dbname) or DIE('Database name is not available!');
//get post value
$titel=$_POST['titel'];
$ural=$_POST['ural'];
$page_linkus=$_POST['page_linkus'];
$exposition=$_POST['exposition'];
//------------------------
function storeLink($titel,$ural,$ural,$ural) {
$query = "INSERT INTO links (titel, ural, page_linkus, exposition,) VALUES ('$titel', '$ural' ,'$page_linkus', '$exposition')";
mysql_query($query) or die('Error, insert query failed');
}

$target_url = "http://www.merchantos.com/";
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';

// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);
if (!$html) {
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
exit;
}

// parse the html into a DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
storeLink($titel,$ural,$ural,$ural);
echo "<br />Link stored: $url";
}
?>

دومی: file_get_contents . این یکی را خودم نوشتم (نوشتن که نه همون سر هم کردن).
ارور

Warning: file_get_contents(www.com.com) [function.file-get-contents]: failed to open stream: No such file or directory in D:\xampp\htdocs\test.php on line 20
The string 'http://www.sloo.com' was not found in the string ''

<?php
//connect to database
$hostname = 'localhost'; // Your MySQL hostname. Usualy named as 'localhost', so you're NOT necessary to change this even this script has already online on the internet.
$dbname = 'newdb'; // Your database name.
$username = 'root'; // Your database username.
$password = ''; // Your database password. If your database has no password, leave it empty.

// Let's connect to host
mysql_connect($hostname, $username, $password) or DIE('Connection to host is failed, perhaps the service is down!');
// Select the database
mysql_select_db($dbname) or DIE('Database name is not available!');

//get post value
$titel=$_POST['titel'];
$ural=$_POST['ural'];
$page_linkus=$_POST['page_linkus'];
$exposition=$_POST['exposition'];

$query = "INSERT INTO links (titel, ural, page_linkus, exposition,) VALUES ('$titel', '$ural' ,'$page_linkus', '$exposition')";
mysql_query($query) or die('Error, insert query failed');

//get contents $ural (.e.g $ural=www.hello.com)
$get = file_get_contents($ural);
//find $find to $get
$find = 'http://www.sloo.com';
$pos = strpos($get, $find);

if ($pos === false) {
echo "The string '$find' was not found in the string '$get'";
} else {
echo "The string '$find' was found in the string '$get'";
echo " and exists at position $pos";
}
?>
استفاده از کدامیک بهتر است و ارور ها را به چه شکل رفع کنم؟

binyaft
یک شنبه 14 آذر 1389, 11:25 صبح
INSERT INTO links (`titel`, `ural`,`page_linkus`,`exposition`) VALUES ('$titel', '$ural' ,'$page_linkus', '$exposition')

binboy
یک شنبه 14 آذر 1389, 12:04 عصر
INSERT INTO links (`titel`, `ural`,`page_linkus`,`exposition`) VALUES ('$titel', '$ural' ,'$page_linkus', '$exposition')

یه اشاره میکردی بد نمی شد. این یعنی چی اونوقت؟ برای کدومش بزارم.
در ضمن انگار به سوالم دقت نکردی، گفتم کدام بهترتر است و ارور چطوری رفع میشه. لطفا توضیح بدید نه با ایما و اشاره. قصد یاد گرفتن است نه فقط حل. مگر فروم ها برای همین نیستن؟
همین

1bsavad
یک شنبه 14 آذر 1389, 14:37 عصر
اینکه file_get_contents بتواند محتوای را از یک url فراخوانی کند، در اکثر سرورهای اشتراکی غیرفعال شده و لذا شما نمی‌توانید کاریش کنید.
اما روش curl معمولا در همه سرورها قابل استفاده است و برنامه شما هم مشکلی نداره ظاهرا و ظاهرا فقط مشکل نبودن جدولی با فیلدهای مربوط رو داره.

binyaft
یک شنبه 14 آذر 1389, 14:54 عصر
یه اشاره میکردی بد نمی شد. این یعنی چی اونوقت؟ برای کدومش بزارم.
در ضمن انگار به سوالم دقت نکردی، گفتم کدام بهترتر است و ارور چطوری رفع میشه. لطفا توضیح بدید نه با ایما و اشاره. قصد یاد گرفتن است نه فقط حل. مگر فروم ها برای همین نیستن؟
همین
:لبخند:
Error, insert query failed
این خطا برای Query زیر هست

$query = "INSERT INTO links (titel, ural, page_linkus, exposition,) VALUES ('$titel', '$ural' ,'$page_linkus', '$exposition')";
mysql_query($query) or die('Error, insert query failed');
بجاش از Query ای که دادم استفاده کنید ، ببینید حل میشه یا نه!

binboy
یک شنبه 14 آذر 1389, 19:57 عصر
اینکه file_get_contents بتواند محتوای را از یک url فراخوانی کند، در اکثر سرورهای اشتراکی غیرفعال شده و لذا شما نمی‌توانید کاریش کنید.
اما روش curl معمولا در همه سرورها قابل استفاده است و برنامه شما هم مشکلی نداره ظاهرا و ظاهرا فقط مشکل نبودن جدولی با فیلدهای مربوط رو داره.

پس شما می گید نباید از file_get_contents استفاده کرد! دوستان دیگر با 1bsavad هم عقیده هستند؟ در ضمن جدولها وجود دارند و از لحاظ دیتابیس مشکلی نیست فقط همچنان ارور عدم اینسرت را میده.




:لبخند:
Error, insert query failed
این خطا برای Query زیر هست

$query = "INSERT INTO links (titel, ural, page_linkus, exposition,) VALUES ('$titel', '$ural' ,'$page_linkus', '$exposition')";
mysql_query($query) or die('Error, insert query failed');
بجاش از Query ای که دادم استفاده کنید ، ببینید حل میشه یا نه!

کد insert درست نوشته شده و حتی با کدی که شما دادید هم جایگزین کردم ولی نشد که بشه.
در ضمن در همان کد Curl اگر بخواهم
mysql_query($query) or die('Error, insert query failed'); را بردارم تمام لینک هایی که در فیلد $ural مقدار دهی شده پشت هم به تعداد زیاد و تکراری بصورت زیر نمایش داده می شود


Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
Link stored: www.iran.ir
در دیتابیس هم ثبت نمی شود (insert) . البته هیچ ارور عدم ثبت هم نمب دهد.
چه باید کرد، لطفا راهنمایی کنید؟

funpatogh
یک شنبه 14 آذر 1389, 20:40 عصر
اگر کوئریت مشکل داره خوب اینجا یک ویرگول زیاد نوشتی


$query = "INSERT INTO links (titel, ural, page_linkus, exposition,)
که میشه این


$query = "INSERT INTO links (titel, ural, page_linkus, exposition)
برات با curl هم 2 مدل نوشتم


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.funpatogh.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
$link="/webgozar/si";
if(preg_match($link,$contents)){
echo "yes";
}else
echo "no";
echo "<br>";
if(stripos($contents,"webgozar"))
echo "exists";
else
echo "not Found";
?>



برای چک کردن یک بار با preg و یکبار هم با stripos نوشتم

binboy
یک شنبه 14 آذر 1389, 23:57 عصر
همگی خدا قوت و دست مریضا اللخصوص funpatogh

binboy
دوشنبه 15 آذر 1389, 15:59 عصر
چطوری میشه اون preg رو با آجاکس یا جیکئوری پیاده کرد یا جور دیگه. یعنی بعد نوشتن لینک در فیلد و بدونه کلیک روی دکمه ثبت و بدونه اینکه صحفه رفشرش بشه بررسی شود که لینک موجود است یا خیر. اگر موجود نبود ارور بدهد یعنی جزء موارد ضروری جهت ثبت باشه. لینک مقاله یا یک توضیح بدید ممنون میشم.

9px.ir
دوشنبه 15 آذر 1389, 16:44 عصر
پس شما می گید نباید از file_get_contents استفاده کرد! دوستان دیگر با 1bsavad هم عقیده هستند؟ در ضمن جدولها وجود دارند و از لحاظ دیتابیس مشکلی نیست فقط همچنان ارور عدم اینسرت را میده.

1bsavad درست می‌گه. خیلی از سرورها برای افزایش کارایی سرورشون این کار رو میکنن که file_get_contents رو غیرفعالش میکنن.

اما در خصوص پیغام خطای شما: شما اگه در مرحله دیباگ هستید، بهتره که به جای خاتمه برنامه با یک پیغام خطای ثابت، اونو با توضیح کامل خطا جایگزین کنید. مثلا:

mysql_query($query) or die('<span dir=ltr>'.$query.'<br>'.mysql_error().'</span>');

binboy
دوشنبه 15 آذر 1389, 16:58 عصر
1bsavad درست می‌گه. خیلی از سرورها برای افزایش کارایی سرورشون این کار رو میکنن که file_get_contents رو غیرفعالش میکنن.

اما در خصوص پیغام خطای شما: شما اگه در مرحله دیباگ هستید، بهتره که به جای خاتمه برنامه با یک پیغام خطای ثابت، اونو با توضیح کامل خطا جایگزین کنید. مثلا:

mysql_query($query) or die('<span dir=ltr>'.$query.'<br>'.mysql_error().'</span>');

دستت درد نکنه ولی مشکلات بالایی رفع شد لطفا موضوع جدیدی که در پست قبلی مطرح کردم را توضیح بدید.

funpatogh
دوشنبه 15 آذر 1389, 19:27 عصر
توی بخش jquery آموزش به صورت pdf گزاشتند جستجو کنید
براتون یک آموزش هم اتچ کردم

binboy
دوشنبه 15 آذر 1389, 20:20 عصر
میشه اون کد php را با jQuery ادغام کرد؟ فقط قسمت چک کردنش.

funpatogh
دوشنبه 15 آذر 1389, 22:53 عصر
آره چرا که نه
شما توی یک فایل فرمت رو بگزار و توش با jquery درخواستت رو بفرست به همین فایل php که نوشتی و جوابش رو بگیر و توی فرمت نشان بده