PDA

View Full Version : تابع get_called_functions



abolfazl-z
پنج شنبه 29 خرداد 1393, 22:31 عصر
سلام دوستان

تابعی جالب براتون نوشتم که میتونه توابعی رو که شما از توابع داخلی PHP در یک فایل PHP فراخوانی کردین را بصورت آرایه استخراج کند.

البته من دنبال این تابع گشتم ولی چیزی نیافتم.


<?php
function get_called_functions($path)
{
if(!is_file($path) || !is_readable($path))
return false;
$calledFunction = array();
list($internalFunctions) = array_values(get_defined_functions());
foreach(token_get_all(file_get_contents($path)) as $token)
if(isset($token[1]))
if(function_exists($token[1]) && in_array($token[1],$internalFunctions))
$calledFunction[] = $token[1];
return $calledFunction;
}
print_r(get_called_functions(__FILE__));
?>

rezaonline.net
جمعه 30 خرداد 1393, 00:30 صبح
خیلی جالبه
میشه کاربردشم بگید

abolfazl-z
جمعه 30 خرداد 1393, 00:54 صبح
خیلی جالبه
میشه کاربردشم بگید

به عنوان مثال شما می خواهید بدونید که در کل پروژه هاتون از چه توابع PHP ایی استفاده کرده اید و حساب کار دستتون بیاد.

MMSHFE
جمعه 30 خرداد 1393, 10:45 صبح
میگم بجای function_exists و in_array بهتر نیست همون اندیس صفر رو چک کنید اگه T_FUNCTION بود یعنی تابع صدا زده شده؟

abolfazl-z
جمعه 30 خرداد 1393, 16:29 عصر
میگم بجای function_exists و in_array بهتر نیست همون اندیس صفر رو چک کنید اگه T_FUNCTION بود یعنی تابع صدا زده شده؟

اگر از T_FUNCTION استفاده شود کلا دیگه کار نمیکند.
چون اگر از function_exists و in_array استفاده نشود ممکن هست توابع خود کاربر هم شامل بشود. ما فقط توابعی PHP ایی را میخواهیم که خودمون در فایلمون صدا زدیم.


int(334) => T_FUNCTION
Array
(
[0] => Array
(
[0] => 372
[1] => <?php

[2] => 1
)

[1] => Array
(
[0] => 334
[1] => function
[2] => 2
)

[2] => Array
(
[0] => 375
[1] =>
[2] => 2
)

[3] => Array
(
[0] => 307
[1] => get_called_functions
[2] => 2
)

[4] => (
[5] => Array
(
[0] => 309
[1] => $path
[2] => 2
)

[6] => )
[7] => Array
(
[0] => 375
[1] =>

[2] => 2
)

[8] => {
[9] => Array
(
[0] => 375
[1] =>

[2] => 3
)

[10] => Array
(
[0] => 301
[1] => if
[2] => 4
)

[11] => (
[12] => !
[13] => Array
(
[0] => 307
[1] => is_file
[2] => 4
)

[14] => (
[15] => Array
(
[0] => 309
[1] => $path
[2] => 4
)

[16] => )
[17] => Array
(
[0] => 375
[1] =>
[2] => 4
)

[18] => Array
(
[0] => 278
[1] => ||
[2] => 4
)

[19] => Array
(
[0] => 375
[1] =>
[2] => 4
)

[20] => !
[21] => Array
(
[0] => 307
[1] => is_readable
[2] => 4
)

[22] => (
[23] => Array
(
[0] => 309
[1] => $path
[2] => 4
)

[24] => )
[25] => )
[26] => Array
(
[0] => 375
[1] =>

[2] => 4
)

[27] => Array
(
[0] => 336
[1] => return
[2] => 5
)

[28] => Array
(
[0] => 375
[1] =>
[2] => 5
)

[29] => Array
(
[0] => 307
[1] => false
[2] => 5
)

[30] => ;
[31] => Array
(
[0] => 375
[1] =>

[2] => 5
)

[32] => Array
(
[0] => 309
[1] => $calledFunction
[2] => 6
)

[33] => Array
(
[0] => 375
[1] =>
[2] => 6
)

[34] => =
[35] => Array
(
[0] => 375
[1] =>
[2] => 6
)

[36] => Array
(
[0] => 362
[1] => array
[2] => 6
)

[37] => (
[38] => )
[39] => ;
[40] => Array
(
[0] => 375
[1] =>

[2] => 6
)

[41] => Array
(
[0] => 361
[1] => list
[2] => 7
)

[42] => (
[43] => Array
(
[0] => 309
[1] => $internalFunctions
[2] => 7
)

[44] => )
[45] => Array
(
[0] => 375
[1] =>
[2] => 7
)

[46] => =
[47] => Array
(
[0] => 375
[1] =>
[2] => 7
)

[48] => Array
(
[0] => 307
[1] => array_values
[2] => 7
)

[49] => (
[50] => Array
(
[0] => 307
[1] => get_defined_functions
[2] => 7
)

[51] => (
[52] => )
[53] => )
[54] => ;
[55] => Array
(
[0] => 375
[1] =>

[2] => 7
)

[56] => Array
(
[0] => 322
[1] => foreach
[2] => 8
)

[57] => (
[58] => Array
(
[0] => 307
[1] => token_get_all
[2] => 8
)

[59] => (
[60] => Array
(
[0] => 307
[1] => file_get_contents
[2] => 8
)

[61] => (
[62] => Array
(
[0] => 309
[1] => $path
[2] => 8
)

[63] => )
[64] => )
[65] => Array
(
[0] => 375
[1] =>
[2] => 8
)

[66] => Array
(
[0] => 326
[1] => as
[2] => 8
)

[67] => Array
(
[0] => 375
[1] =>
[2] => 8
)

[68] => Array
(
[0] => 309
[1] => $token
[2] => 8
)

[69] => )
[70] => Array
(
[0] => 375
[1] =>

[2] => 8
)

[71] => Array
(
[0] => 301
[1] => if
[2] => 9
)

[72] => (
[73] => Array
(
[0] => 351
[1] => isset
[2] => 9
)

[74] => (
[75] => Array
(
[0] => 309
[1] => $token
[2] => 9
)

[76] => [
[77] => Array
(
[0] => 305
[1] => 1
[2] => 9
)

[78] => ]
[79] => )
[80] => )
[81] => Array
(
[0] => 375
[1] =>

[2] => 9
)

[82] => Array
(
[0] => 301
[1] => if
[2] => 10
)

[83] => (
[84] => Array
(
[0] => 307
[1] => function_exists
[2] => 10
)

[85] => (
[86] => Array
(
[0] => 309
[1] => $token
[2] => 10
)

[87] => [
[88] => Array
(
[0] => 305
[1] => 1
[2] => 10
)

[89] => ]
[90] => )
[91] => Array
(
[0] => 375
[1] =>
[2] => 10
)

[92] => Array
(
[0] => 279
[1] => &&
[2] => 10
)

[93] => Array
(
[0] => 375
[1] =>
[2] => 10
)

[94] => Array
(
[0] => 307
[1] => in_array
[2] => 10
)

[95] => (
[96] => Array
(
[0] => 309
[1] => $token
[2] => 10
)

[97] => [
[98] => Array
(
[0] => 305
[1] => 1
[2] => 10
)

[99] => ]
[100] => ,
[101] => Array
(
[0] => 309
[1] => $internalFunctions
[2] => 10
)

[102] => )
[103] => )
[104] => Array
(
[0] => 375
[1] =>

[2] => 10
)

[105] => Array
(
[0] => 309
[1] => $calledFunction
[2] => 11
)

[106] => [
[107] => ]
[108] => Array
(
[0] => 375
[1] =>
[2] => 11
)

[109] => =
[110] => Array
(
[0] => 375
[1] =>
[2] => 11
)

[111] => Array
(
[0] => 309
[1] => $token
[2] => 11
)

[112] => [
[113] => Array
(
[0] => 305
[1] => 1
[2] => 11
)

[114] => ]
[115] => ;
[116] => Array
(
[0] => 375
[1] =>

[2] => 11
)

[117] => Array
(
[0] => 336
[1] => return
[2] => 12
)

[118] => Array
(
[0] => 375
[1] =>
[2] => 12
)

[119] => Array
(
[0] => 309
[1] => $calledFunction
[2] => 12
)

[120] => ;
[121] => Array
(
[0] => 375
[1] =>

[2] => 12
)

[122] => }
[123] => Array
(
[0] => 375
[1] =>

[2] => 13
)

[124] => Array
(
[0] => 307
[1] => var_dump
[2] => 14
)

[125] => (
[126] => Array
(
[0] => 307
[1] => T_FUNCTION
[2] => 14
)

[127] => )
[128] => ;
[129] => Array
(
[0] => 375
[1] =>

[2] => 14
)

[130] => Array
(
[0] => 307
[1] => print_r
[2] => 15
)

[131] => (
[132] => Array
(
[0] => 307
[1] => token_get_all
[2] => 15
)

[133] => (
[134] => Array
(
[0] => 307
[1] => file_get_contents
[2] => 15
)

[135] => (
[136] => Array
(
[0] => 369
[1] => __FILE__
[2] => 15
)

[137] => )
[138] => )
[139] => )
[140] => ;
[141] => Array
(
[0] => 375
[1] =>

[2] => 15
)

[142] => Array
(
[0] => 374
[1] => ?>
[2] => 16
)

)