PDA

View Full Version : سوال: یافتن یک کلمه از بین چندین فایل php



ashkan 261
جمعه 28 بهمن 1390, 19:06 عصر
سلام

گاهی وقتا پیش اومده که متوجه محل دقیق یک کلمه توی فایل ها نشدم ، طبیعتا توی یک فایل قابلیت فایند موجود هست اما به فرض توی 500 فایل نمیشه دونه دونه کلمه رو فایند کرد ، آیا روش یا برنامه ای هست که اتوماتیک محتویات همه فایل های php یا حالا سایر زبان هارو در رابطه با یک کلمه خاص جستجو کنه ؟

با تشکر

nader3
جمعه 28 بهمن 1390, 19:14 عصر
سلام. یه راه که به نظرم میرسه اینه تمام فایلارو تو یه فایل اینکلود کنی البته اگه از dreamweaver استفاده می کنی. بعد فایند و که اوردی گزینه find in و open document بذار.

yones_safari
جمعه 28 بهمن 1390, 20:14 عصر
عزیزم با تابع glob میتونی اسم تمامی فایلها موجود در یک شاخه رو پیدا کنی.مثلا

glob("*.php");
تمامی فایلهای php موجود در فولدر جاری رو در آرایه قرار میده.
حالا میتونی با یه foreach اونو پیمایش کنی:

foreach (glob("*.php") as $filename) {

}
حالا میتونی این فایلها و بخونی و بریزی تو یک آرایه:

$i=0;
$a=array();
foreach (glob("*.php") as $filename) {
$a[$i]=file_get_contents($filename);
$i=$i+1;
}
حالا میتونی راحت تو این آرایه جستجوت رو بکنی.
موفق باشید.

ashkan 261
جمعه 28 بهمن 1390, 22:50 عصر
من فقط با notepad++ کار میکنم .

اما منظورم اسم فایل های php نیست ، مثلا میخوام کلمه option_manager رو پیدا کنم ، میدونم که این دستور توی فایل ها هست اما نمیدونم داخل کدوم فایل هست ، قصدم اینه که محتوای همه فایل ها رو سرچ کنم نه صرفا نام اون هارو

nader3
جمعه 28 بهمن 1390, 23:04 عصر
من فقط با notepad++ کار میکنم .

اما منظورم اسم فایل های php نیست ، مثلا میخوام کلمه option_manager رو پیدا کنم ، میدونم که این دستور توی فایل ها هست اما نمیدونم داخل کدوم فایل هست ، قصدم اینه که محتوای همه فایل ها رو سرچ کنم نه صرفا نام اون هارو
این کد باعث میشه تمام محتوای فایلا تو یه فایل جمع شن. کافیه صفحه رو تو مرورگر باز کنی فایند کنی. درسته آقا یونس؟؟

yones_safari
جمعه 28 بهمن 1390, 23:46 عصر
من فقط با notepad++ کار میکنم .

اما منظورم اسم فایل های php نیست ، مثلا میخوام کلمه option_manager رو پیدا کنم ، میدونم که این دستور توی فایل ها هست اما نمیدونم داخل کدوم فایل هست ، قصدم اینه که محتوای همه فایل ها رو سرچ کنم نه صرفا نام اون هارو
این خط محتوای فایلها رو میریزه تو آرایه نه نامشون رو.

$a[$i]=file_get_contents($filename)

yones_safari
جمعه 28 بهمن 1390, 23:51 عصر
این کد باعث میشه تمام محتوای فایلا تو یه فایل جمع شن. کافیه صفحه رو تو مرورگر باز کنی فایند کنی. درسته آقا یونس؟؟
نه داداش تو یه آرایه میریزه که با تابع strstr یا دیگر توابع جستجو میتونید مقدار مورد نظر رو پیدا کنید.

yones_safari
جمعه 28 بهمن 1390, 23:55 عصر
صبر کنید اعلان یه برنامه بنویسم تا رفع ابهام بشه.

yones_safari
شنبه 29 بهمن 1390, 00:45 صبح
دوستان کد زیر رو نوشتم که نام فایل و شماره مکانی که فیلد جستجو در فایل داره رو به خروجی میبره:

<?php
$find="yones";
$i=0;
$a=array();
$fname=array();
foreach (glob("*.php") as $filename)
{
if($filename!=basename($_SERVER['REQUEST_URI'], ".php").".php")
{
$a[$i]=file_get_contents($filename);
$fname[$i]=$filename;
$i=$i+1;
}
}
for($i=0;$i<sizeof($a);$i++)
{
$strpos=0;
for($j=1;$j<=substr_count($a[$i],$find);$j++)
{
$strpos=strpos($a[$i],$find,$strpos+1);
echo $find." IN File "."<span style='color:green'>".$fname[$i]."</span>"." In Line "."<span style='color:red'>".$strpos."</span></br>";
}
}

?>
در پست بعدی خط به خط توضیح میدم.

yones_safari
شنبه 29 بهمن 1390, 01:04 صبح
در خط 2 متغییر find همون فیلد جستجوی ماست.
در خط 4 آرایه a محتویات فایلهای ما رو درون خودش نگه خواهد داشت.
در خط 5 آرایه fname نام فایلهای ما را نگه خواهد داشت.
در خط 8 مقایسه میکنیم که اگه نام فایل همنام با فایلی که الان داره اجرا میشه باشه محتویات اونو تو آرایه نریزه.
در خط 10 محتویات فایل رو میریزیم در آرایه a.
در خط 11 نام فایل رو میریزیم در آرایه fname.
در خط 12 متغییر i رو یک واحد افزایش می دیم تا در دفعه بعد مقادیر جدید توی خانه های خالی آرایه ذخیره بشن.
در خط 15 با استفاده از تابع sizeof تعداد عناصر آرایه a را به دست میاریم تا تعداد تکرار حلقه مشخص شود.
در خط 18 تعداد تکرار فیلد مورد جستجو در عناصر آرایه را با استفاده از تابع substr_count به دست میاریم.
در خط 20 مکان فیلد مورد جستجو را با تابع strpos به دست میاریم.
نحوه استفاده از تابع strpos:
تابع strpos سه تا مقدار میگیره:

strpos("مکان شروع","رشته مورد جستجو","رشته منبع");
نکته:در خط 20 آرگومان آخر این تابع رو با 1 جمع میکنیم که مقدار قبلی رو نده.
در خط 21 هم خروجی رو چاپ میکنیم.
که خروجی برنامه مثل شکل زیر میشه:
82856
موفق باشید.

narsic
شنبه 29 بهمن 1390, 12:05 عصر
از همون برنامه np++ استفاده میکنید خودش این کار رو براتون انجام میده یعد از زدن ctrl+f به زبانه ی سوم یا چهارم find in file/Directory برید فک میکنم اوجا همه چی گویا باشه نیازی به توضیح نداره (جایگزینی و فیلتر رو هم همونجا میتونید انجام بدید)